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)。
版本对比
以版本1 UUID 6ba7b810-9dad-11d1-80b4-00c04fd430c8
为例:
-
6ba7b810
:时间戳低32位。 -
9dad
:时间戳中16位。 -
11d1
:时间戳高12位 + 版本号 1
。 -
80b4
:变体标识(10xx
表示变体1)。 -
00c04fd430c8
:MAC地址。
总结
UUID各段含义取决于其版本,核心是:
-
时间戳
(版本1/2)或 随机数/哈希值
(版本3/4/5)。 -
版本号
和 变体标识
是固定规则位。 -
节点/MAC地址
仅版本1/2有意义。