跳至主要內容

產生確定性的 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 指南