跳转到主要内容

生成确定性的 UUID v5

第 5 版 UUID 由命名空间 UUID 和名称通过 SHA-1 推导而来。任何人对相同的命名空间和相同的名称进行哈希,都会得到完全相同的 UUID,因此 ID 可以重新计算,无需存储。

计算示例

命名空间(UUID)
DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
名称
example.com
结果
cfbff0d1-9375-5685-968c-48ce8b15ae17
命名空间(UUID)
DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8)
名称
Example.com
结果
a1feb884-07f5-5a14-8edb-cb659a7fbadc

工作原理

  • 将命名空间的 16 个字节与名称的 UTF-8 字节拼接后进行 SHA-1 哈希。摘要的前 16 个字节在设置版本位(5)和变体位后即成为 UUID。
  • RFC 9562 预定义了 DNS 名称、URL、ISO OID 和 X.500 可分辨名称的命名空间。你也可以把任意自定义 UUID 用作私有命名空间。
  • 名称按字节逐一比较:大小写、空格和末尾斜杠都会改变结果,因此请先规范化名称。由于输出可以预测,切勿把 UUID v5 用作密钥。
UUID版本

一次生成1-100个UUID

DNS命名空间:6ba7b810-9dad-11d1-80b4-00c04fd430c8(默认)

要哈希的名称(例如域名、电子邮件等)

关于UUID

UUID v1: 基于时间的UUID,包含时间戳和生成UUID的计算机的MAC地址。当您需要知道UUID何时创建时很有用。

UUID v4: 随机生成的UUID。这是最常用的版本,在最小信息泄露的情况下提供良好的唯一性。

UUID v5: 使用SHA-1哈希的基于名称的UUID。给定相同的命名空间和名称,您将始终获得相同的UUID。对于确定性UUID生成很有用。

更多 UUID 指南