UUID各段含义

UUID(Universically Unique Identifier)是一个128位的标识符,通常表示为32个十六进制字符,由连字符分隔为五段,格式为 8-4-4-4-12
(例如:123e4567-e89b-12d3-a456-426614174000
)。其各段的含义取决于 版本
 和 变体
,但通用结构如下:

UUID 通用结构

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  |    |   |    |    |        |  |    |   |    |    |        └─ 节点/随机数据(12字符)  |    |   |    |    └─ 变体标识(4字符)  |    |   |    └─ 时间戳高位/哈希数据(4字符)  |    |   └─ 版本标识(4字符)  |    └─ 时间戳中段(4字符)  └─ 时间戳低位(8字符)

关键段详解

1. 时间戳(版本1/2)

  • 前8字符
    :时间戳的低32位(Unix时间戳的纳秒精度)。

  • 中间4字符
    :时间戳的中16位。

  • 接下来的4字符
    :时间戳的高12位 + 4位版本号(如版本1为 1
    )。

  • 作用
    :确保基于时间的UUID唯一性。

2. 版本号

  • 位置:第3段的第一个字符(如 e89b-
     中的 1
    )。

  • 常见版本:

  • 版本1
    :基于时间 + MAC地址。

  • 版本3/5
    :基于命名空间和哈希(MD5/SHA-1)。

  • 版本4
    :完全随机生成(最常见)。

3. 变体标识

  • 位置:第4段的第一个字符(如 a456-
     中的 a
    )。

  • 标识UUID布局,常见变体:

  • 变体1
    (10xx
    ):标准UUID(如 8
    , 9
    , a
    , b
    )。

  • 变体0
    (0xxx
    ):旧格式(罕见)。

  • 其他
    :保留未来使用。

4. 节点信息(版本1/2)

  • 最后12字符
    :通常为生成机器的MAC地址(版本1)或随机数(版本4)。

  • 作用:防止同一时间戳下的冲突。

5. 哈希数据(版本3/5)

  • 除版本和变体外的所有字段由命名空间和名称的哈希值填充(如MD5/SHA-1)。

版本对比

版本
生成方式
关键特征
v1
时间 + MAC地址
可反推生成时间和机器
v3
MD5哈希 + 命名空间
确定性生成,相同输入输出相同UUID
v4
随机数
无规律,依赖随机性保证唯一性
v5
SHA-1哈希 + 命名空间
类似v3,但更安全
### 示例解析

以版本1 UUID 6ba7b810-9dad-11d1-80b4-00c04fd430c8
 为例:

  • 6ba7b810
    :时间戳低32位。

  • 9dad
    :时间戳中16位。

  • 11d1
    :时间戳高12位 + 版本号 1

  • 80b4
    :变体标识(10xx
     表示变体1)。

  • 00c04fd430c8
    :MAC地址。

总结

UUID各段含义取决于其版本,核心是:

  1. 时间戳
    (版本1/2)或 随机数/哈希值
    (版本3/4/5)。

  2. 版本号
    和 变体标识
    是固定规则位。

  3. 节点/MAC地址
    仅版本1/2有意义。

江达小记