🌐 ZH-TW

🆔 UUID 產生器

產生通用唯一識別碼(UUID)。可建立用於資料庫主鍵、API 權杖、工作階段 ID 等場景的標準 UUID。

版本資訊

v1(基於時間戳記)
基於 MAC 位址與時間戳記,保證時間順序。
v4(隨機)
完全隨機,最常用。
v7(可依時間戳記排序)
基於時間戳記可排序,最新標準。
指南

瞭解更多

01

1. 什麼是 UUID?

UUID(Universally Unique Identifier)即通用唯一識別碼,是一種無需中央協調即可保證唯一性的 128 位元識別碼。它以 8-4-4-4-12 格式的十六進位表示(例如:550e8400-e29b-41d4-a716-446655440000),在全球任何地方產生都極難重複。它被廣泛用於資料庫主鍵、工作階段 ID、檔案名稱、API 權杖等各種場景。UUID 也稱為 GUID(Globally Unique Identifier),由 RFC 4122 標準定義。

02

2. 各 UUID 版本的特點比較

UUID 共有 5 個版本,每個版本採用不同的產生方式。v1 將 MAC 位址與時間戳記結合以保證時間順序,但因暴露 MAC 位址而存在安全風險。v4 為完全隨機產生,使用最廣泛,不可預測性高。v7 是 2024 年標準化的最新版本,可基於時間戳記排序,有利於資料庫索引。v2 用於 DCE 安全,v3/v5 基於命名空間,用於特殊用途。

03

3. UUID 的使用場景

UUID 在多種場景下都很有用。在分散式系統中,無需中央伺服器即可產生唯一 ID,具有出色的可擴充性。在資料庫中,使用 UUID 作為主鍵而非自動遞增 ID,可以避免合併衝突。在微服務架構中,用於追蹤服務間的通訊。此外,還廣泛用於防止檔案上傳時的檔案名稱衝突、產生暫時性權杖、事件追蹤以及記錄關聯分析等。

04

4. v1、v4、v7 的選擇指南

UUID 版本的選擇取決於需求。如果時間順序很重要且可以接受暴露 MAC 位址,請選擇 v1。但 MAC 位址可用於追蹤產生位置,存在隱私問題。如果安全性重要且不需要排序,v4 是最佳選擇。它完全隨機、不可預測,且不會暴露個人資訊。如果同時需要時間排序和安全性,則建議使用 v7。基於時間戳記的排序可帶來良好的資料庫效能,並減少索引碎片。

05

5. UUID 唯一性的保證原理

UUID 的碰撞機率極低。以 v4 為例,122 位元是隨機的,因此有 2^122 = 5.3 x 10^36 種可能的組合。即使每秒產生 10 億個,要達到 50% 的碰撞機率也需要 85 年。v1 透過時間戳記(60 位元)和時脈序列(14 位元)保證基於時間的唯一性,並透過 MAC 位址(48 位元)保證基於空間的唯一性。v7 將 Unix 時間戳記(48 位元)和隨機數(74 位元)結合,同時滿足時間順序和唯一性。

06

6. 在資料庫中使用 UUID

將 UUID 用作資料庫主鍵有多項優勢。在分散式環境中,每個節點無需中央 ID 產生器即可獨立建立 ID,具有出色的可擴充性。資料合併時不會出現 ID 衝突,且在 URL 中暴露時也無法依序猜測,因而在安全性上更有優勢。不過也有缺點:UUID 為 16 位元組,比整數類型(4-8 位元組)更大,且 v4 的隨機性可能降低索引效能。這種情況下使用 v7,可依時間順序排序,從而提升 B-tree 索引的效能。

常見問題

UUID v1、v4、v7 該怎麼選擇?
若重視安全性與不可預測性,選 v4;若需要依時間排序且顧慮資料庫索引效能,選 v7;v1 雖可保證時間順序,但會暴露 MAC 位址,較少用於新專案。
UUID 會重複嗎?
機率極低。以 v4 為例,共有 2^122 種可能組合,即使每秒產生 10 億個,要達到 50% 碰撞機率也需要 85 年以上,實務上可視為不會重複。
可以一次產生多個 UUID 嗎?
可以,此工具支援批次產生,最多可一次產生 100 組 UUID,並提供「全部複製」功能方便貼到程式碼或試算表中。
UUID 適合當作資料庫主鍵嗎?
適合,尤其在分散式系統中可避免合併衝突,且無法依序猜測。但 UUID 佔 16 位元組,比自動遞增整數大,v4 的隨機性也可能影響索引效能,若重視效能可考慮 v7。
UUID 和 GUID 是一樣的東西嗎?
是的,GUID(Globally Unique Identifier)是微軟對 UUID 的稱呼,兩者在格式與用途上基本相同,都遵循 RFC 4122 標準。