什麼是 UUID?通用唯一識別碼的完整說明
快速解答
UUID 是一個 128 位元標識符,表示為 36 個字元(32 個十六進位數字加 4 個連字符)。 UUID 實際上是唯一的,無需協調——衝突機率可以忽略不計。 UUID v4(隨機)是最常見的版本。使用我們免費的 UUID 產生器在您的瀏覽器中建立 UUID。
介紹
UUID(通用唯一識別符),在 Microsoft 術語中也稱為 GUID(全域唯一識別符),是一個 128 位元標識符,實際上無需中央協調即可保證唯一。 UUID 由 RFC 4122 定義,廣泛用作資料庫主鍵、請求 ID、會話令牌和分散式系統識別碼。最常見的版本是 UUID v4,它使用隨機位元。 UUID 表示為連字號分隔的 5 組中的 32 個十六進位數字:8-4-4-4-12(例如,550e8400-e29b-41d4-a716-446655440000)。
步步
-
了解 UUID 結構
UUID 為 128 位,顯示為 5 組 32 個十六進位數字:8-4-4-4-12,以連字號分隔(例如 550e8400-e29b-41d4-a716-446655440000)。第 13 位數字表示版本(4 表示 v4),第 17 位數字表示變異。
-
了解 UUID 版本
v1:基於時間(時間戳 + MAC 位址)-按時間排序,但會洩漏身分。 v3:基於名稱,使用 MD5 雜湊。 v4:隨機-最常見,沒有隱私問題。 v5:基於名稱,使用 SHA-1 雜湊。 v6 和 v7:按時間排序,並且比 v1 改進了隱私性。
-
了解碰撞機率
UUID v4 有 2^122 個可能的值。 103 兆個 UUID 之間發生衝突的機率為 50%。對於實際使用(數百萬個 ID),衝突機率實際上為零 - 您可以獨立產生 UUID,無需協調。
-
適當使用 UUID
幾乎所有用例(資料庫 ID、請求 ID、會話令牌)都使用 v4。如果您需要按時間排序的資料庫位置 ID,請使用 v7。在安全敏感的上下文中避免使用 v1 — 它嵌入了時間戳記和 MAC 位址。
範例
UUID v4(隨機)
輸入: 使用 crypto.getRandomValues 生成
輸出: 550e8400-e29b-41d4-a716-446655440000
UUID v1(基於時間)
輸入: 時間戳+MAC位址
輸出: a3bbf0ee-d6e4-11ed-a5b3-3c9703e8b4a1
無 UUID
輸入: All zeros
輸出: 00000000-0000-0000-0000-000000000000
常見問題
- 對 UUID 使用 Math.random() — 它在加密上不安全。在瀏覽器中使用 crypto.getRandomValues() 或 crypto.randomUUID()。
- 將 UUID 儲存為字串 — UUID 字串為 36 個位元組;儲存為 UUID 類型(16 位元組),效率更高。如可用,請在資料庫中使用本機 UUID 類型。
- 在安全敏感上下文中使用 v1 — v1 嵌入時間戳和 MAC 位址,這可能會洩露有關其產生時間和地點的資訊。使用 v4 進行匿名。
- 假設 UUID 確實是唯一的——它們實際上是唯一的(碰撞機率可以忽略不計),但在數學上不能保證唯一。
提示
- 幾乎所有用例都使用 UUID v4 - 它是隨機的,沒有隱私問題,並且受到所有現代資料庫的支援。
- 在現代瀏覽器中使用 crypto.randomUUID() 來獲得沒有函式庫的內建 v4 產生器。
- 將 UUID 作為 UUID/GUID 類型儲存在資料庫中(16 位元組)而不是字串(36 位元組),以獲得更好的儲存和索引效能。
- 使用我們的 UUID 產生器在瀏覽器中立即建立 UUID — 無需註冊,完全私密。