UUID格式:8-4-4-4-12 - 为什么?

Fid*_*del 74 format uuid guid

为什么UUID的格式为"8-4-4-4-12"(数字)?我已经看了看原因,但找不到要求它的决定.

格式为十六进制字符串的UUID示例:58D5E212-165B-4CA0-909B-C86B9CEE0111

Mat*_*ten 59

time, version, clock_seq_hi, clock_seq_lo, node正如后续的rfc所示,它被分开.

来自IETF RFC4122:

4.1.2.  Layout and Byte Order

   To minimize confusion about bit assignments within octets, the UUID
   record definition is defined only in terms of fields that are
   integral numbers of octets.  The fields are presented with the most
   significant one first.

   Field                  Data Type     Octet  Note
                                        #

   time_low               unsigned 32   0-3    The low field of the
                          bit integer          timestamp

   time_mid               unsigned 16   4-5    The middle field of the
                          bit integer          timestamp

   time_hi_and_version    unsigned 16   6-7    The high field of the
                          bit integer          timestamp multiplexed
                                               with the version number  

   clock_seq_hi_and_rese  unsigned 8    8      The high field of the
   rved                   bit integer          clock sequence
                                               multiplexed with the
                                               variant

   clock_seq_low          unsigned 8    9      The low field of the
                          bit integer          clock sequence

   node                   unsigned 48   10-15  The spatially unique
                          bit integer          node identifier

   In the absence of explicit application or presentation protocol
   specification to the contrary, a UUID is encoded as a 128-bit object,
   as follows:

   The fields are encoded as 16 octets, with the sizes and order of the
   fields defined above, and with each field encoded with the Most
   Significant Byte first (known as network byte order).  Note that the
   field names, particularly for multiplexed fields, follow historical
   practice.

   0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                          time_low                             |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |       time_mid                |         time_hi_and_version   |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |clk_seq_hi_res |  clk_seq_low  |         node (0-1)            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |                         node (2-5)                            |
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Run Code Online (Sandbox Code Playgroud)

  • 为什么时间戳分为三个部分? (9认同)
  • 如何生成字段取决于UUID版本.首选方法不使用时间,因为它显示了生成ID的时间(潜在的安全问题).http://en.wikipedia.org/wiki/Universally_unique_identifier#Variants_and_versions (3认同)
  • @brocoli 我不得不不同意。V4 依赖于加密强的随机数生成器,与简单地获取 [MAC 地址](https://en.wikipedia.org/wiki/MAC_address)、当前时刻和递增任意数字,如 V1 UUID 所示。此外,V1 的实现通常是开源的,并且是多年前构建的,在整个行业中有很多用途,现在已经很成熟了。声称 V1“容易出现部分故障”是愚蠢的。V1 UUID 是系统的*最后*部分,您需要担心失败。 (2认同)
  • @BasilBourque 现在,随着容器和容器网络的激增,您可以看到的问题之一是 MAC 地址冲突。通常,容器和虚拟机从有限范围的可能 MAC 地址中获取数据。默认情况下,IIRC Hyper-V 仅从 256 个可能的 MAC 地址池中提取。 (2认同)

小智 12

格式在IETF RFC4122的第3节中定义.输出格式定义为"UUID = ..."

3.-命名空间注册模板

命名空间ID:UUID注册信息:注册日期:2003-10-01

宣布名称空间的注册人:JTC 1/SC6(ASN.1报告人组)

语法结构声明:UUID是一个空间和时间相对于所有UUID空间唯一的标识符.由于UUID是固定大小并包含时间字段,因此值可能会翻转(大约AD 3400,具体取决于所使用的特定算法).UUID可用于多种用途,从标记具有极短寿命的对象到可靠地识别网络中的非常持久的对象.

  The internal representation of a UUID is a specific sequence of
  bits in memory, as described in Section 4.  To accurately
  represent a UUID as a URN, it is necessary to convert the bit
  sequence to a string representation.

  Each field is treated as an integer and has its value printed as a
  zero-filled hexadecimal digit string with the most significant
  digit first.  The hexadecimal values "a" through "f" are output as
  lower case characters and are case insensitive on input.

  The formal definition of the UUID string representation is
  provided by the following ABNF [7]:

  UUID                   = time-low "-" time-mid "-"
                           time-high-and-version "-"
                           clock-seq-and-reserved
                           clock-seq-low "-" node
  time-low               = 4hexOctet
  time-mid               = 2hexOctet
  time-high-and-version  = 2hexOctet
  clock-seq-and-reserved = hexOctet
  clock-seq-low          = hexOctet
  node                   = 6hexOctet
  hexOctet               = hexDigit hexDigit
  hexDigit =
        "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9" /
        "a" / "b" / "c" / "d" / "e" / "f" /
        "A" / "B" / "C" / "D" / "E" / "F"
Run Code Online (Sandbox Code Playgroud)


Pab*_*zos 7

128 位

“8-4-4-4-12”格式仅供人类阅读。该UUID是一个真正的128位数字。

考虑字符串格式在存储或在内存中时需要字节数的两倍而不是 128 位数字。我建议在内部使用该数字,当它需要显示在 UI 上或导出到文件中时,请使用字符串格式。