跳至主要內容
FreeOnlineTools Go
繁體中文
比較

UUID v1、v4、v5:您應該使用哪個版本?

作者:FreeOnlineTools Team · 更新日期:2026-08-28

快速解答

預設使用 UUID v4(隨機)—它不需要協調且碰撞風險可以忽略不計。只有當您需要按時間排序的 ID 並且可以保護節點 ID 時,才使用 v1(基於時間)。當您需要從名稱派生確定性 ID 時,請使用 v5(命名空間+名稱)。使用我們的免費 UUID 產生器產生任何版本。

介紹

UUID(通用唯一識別符)是一個 128 位元標識符,呈現為 8-4-4-4-12 十六進位組中的 36 個字符,例如123e4567-e89b-12d3-a456-426614174000。 RFC 9562定義了多個版本;您最常遇到的三個是 v1(時間 + MAC)、v4(隨機)和 v5(命名空間 + 名稱,SHA-1)。每個都在唯一性保證、可排序性和確定性之間做出不同的權衡。

步步

  1. UUID v1 —基於時間和節點

    v1 編碼目前 60 位元時間戳記(自 1582 年 10 月 15 日以來的 100 ns 間隔)和 48 位元節點 ID(通常是 MAC 位址)。同一節點上產生的 ID 是單調遞增且可依時間排序的。風險:MAC 位址洩漏硬體身份,節點之間的時脈偏差可能會破壞排序。

  2. UUID v4 —隨機

    v4 使用 122 個隨機位元(版本/變體固定有 6 位)。對於 122 個隨機位,2.71 兆個 ID 之間發生衝突的機率為 50% — 對於任何實際工作負載,這種可能性實際上為零。 v4 不需要協調,也不會洩露主機訊息,使其成為最安全的預設值。

  3. UUID v5 — 命名空間與名稱 (SHA-1)

    v5 使用 SHA-1 對命名空間 UUID 和名稱字串進行雜湊處理,以產生確定性的 128 位元 ID。相同的(命名空間、名稱)對始終產生相同的 UUID,這對於從自然鍵派生的重複資料刪除和穩定 ID 來說是理想的選擇。 v3 是相同的想法,但使用 MD5 (避免它)。

  4. 比較權衡

    v1 是可排序的,但會洩漏 MAC 並且需要時脈同步。 v4 是隨機且私有的,但不可排序。 v5 具有確定性和重複資料刪除功能,但不是隨機的 — 猜測名稱可以讓攻擊者重現 UUID。根據您是否需要有序性、隨機性或確定性進行選擇。

  5. 選擇適合您情況的版本

    資料庫主鍵:v4(或較新系統中的 v7,以實現時間排序)。沒有協調的分散式系統:v4。來自自然鍵的確定性 ID(例如 URL →UUID):v5。受益於時間順序的審核日誌:帶有安全隨機節點 ID 的 v1。

範例

UUID v1(基於時間,可排序)

輸入: 於 2026-08-28T12:00:00Z 在節點 00:11:22:33:44:55 上生成

輸出: 1ef7c1d0-2d3b-11f0-8000-001122334455(版本數字“1”,可依時間排序)

UUID v4(隨機)

輸入: Random generation

輸出: f47ac10b-58cc-4372-a567-0e02b2c3d479(版本數字“4”,隨機位元)

UUID v5(從命名空間+名稱確定)

輸入: 命名空間 DNS (6ba7b810-9dad-11d1-80b4-00c04fd430c8) + 名稱 'freeonlinetoolsgo.com'

輸出: 74738ff5-5367-5958-9aeb-0c1f1f1f1f1f(相同的輸入總是產生相同的輸出)

常見問題

  • 將 UUID 儲存為 VARCHAR(36),而不是本機 16 位元組 BINARY/UUID 類型:這會浪費 2 倍的儲存空間並破壞索引效能。如果可用,請使用本機 UUID 欄位類型。
  • 在不保護節點 ID 的情況下使用 v1:預設 MAC 位址會洩漏硬體身份,並且存在隱私問題。將其替換為每個節點的加密隨機 48 位元值。
  • 假設 v4 碰撞是不可能的:事實並非如此——它們只是在天文數字上不太可能發生。對於 122 個隨機位,您需要約 2.71 兆個 ID 才能獲得 50% 的機會。對於 10 億個 ID,機率約為 0.0000000000000001。
  • 使用 v3(基於 MD5)而不是 v5(基於 SHA-1):MD5 已損壞,因此首選 v5。兩者都是確定性的,但v5具有更強的抗碰撞能力。

提示

  • 幾乎每個用例都預設使用 v4——它是隨機的、私有的、碰撞安全的,無需任何協調。
  • 如果您需要可按時間排序的隨機 ID,請查看 UUID v7 (RFC 9562, 2024),它將 Unix 時間戳與隨機位元結合在一起 — 對於現代資料庫來說,它比 v1 更好。
  • 使用 v5 從自然鍵(URLs、電子郵件地址)產生穩定的 ID,因此相同的輸入始終對應到相同的 UUID — 對於重複資料刪除和冪等 APIs 很有用。
  • 盡可能在客戶端產生 UUID,以避免往返伺服器 - 我們的 UUID 產生器完全使用 crypto.getRandomValues() 在瀏覽器中運行。

相關工具

相關指南

參考