-
通用唯一識別碼
鎖定
- 中文名
- 通用唯一識別碼
- 外文名
- Universally Unique Identifier
- 簡 稱
- UUID
- 領 域
- 計算機
目錄
- 1 簡介
- 2 定義
- 3 格式
- 4 隨機UUID的重複機率
通用唯一識別碼簡介
UUID的目的是讓分佈式系統中的所有元素都能有唯一的辨識信息,而不需要透過中央控制端來做辨識信息的指定。如此一來,每個人都可以創建不與其它人衝突的UUID。在這樣的情況下,就不需考慮數據庫創建時的名稱重複問題。目前應用最廣泛的UUID是微軟公司的全局唯一標識符(GUID),而其他重要的應用,則有Linuxext2/ext3文件系統、LUKS加密分區、GNOME、KDE、macOS等。另外,也可以在e2fsprogs包中的UUID庫找到實現。
[1]
通用唯一識別碼定義
UUID的標準型式包含32個16進制數字,以連字號分為五段,形式為8-4-4-4-12的32個字符。示例:
- 550e8400-e29b-41d4-a716-446655440000
UUID亦可刻意重複以表示同類。例如説微軟的COM中,所有組件皆必須實現出IUnknown接口,方法是產生一個代表IUnknown的UUID。無論是程序試圖訪問組件中的IUnknown接口,或是實現IUnknown接口的組件,只要IUnknown一被使用,皆會被引用至同一個ID:00000000-0000-0000-C000-000000000046。
[1]
通用唯一識別碼格式
在規範字符串格式中,UUID 的十六個八位字節被表示為 32個十六進制(基數16)數字,以連字號分隔的五組來顯示,形式為 8-4-4-4-12,總共有 36個字符(即三十二個英數字母和四個連字號)。例如:
- 123e4567-e89b-12d3-a456-426655440000
- xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
數字M的四位表示 UUID版本,數字N的一至三個最高有效位表示 UUID變體。在例子中,M是1而且N是a(10xx),這意味着 UUID是變體一版本 UUID;即基於時間的 DCE/RFC 4122 UUID。
[2]
通用唯一識別碼隨機UUID的重複機率
隨機產生的UUID(例如説由java.util.UUID類別產生的)的128個比特中,有122個比特是隨機產生,4個比特在此版本('Randomly generated UUID')被使用,還有2個在其變體('Leach-Salz')中被使用。利用生日悖論,可計算出兩筆UUID擁有相同值的機率約為
以下是以x=2計算出n筆UUID後產生碰撞的機率:
n | 機率 |
---|---|
68,719,476,736 = 2 | 0.0000000000000004 (4 x 10) |
2,199,023,255,552 = 2 | 0.0000000000004 (4 x 10) |
70,368,744,177,664 = 2 | 0.0000000004 (4 x 10) |
與被隕石擊中的機率比較的話,已知一個人每年被隕石擊中的機率估計為170億分之1,也就是説機率大約是0.00000000006 (6 x 10),等同於在一年內置立數十兆筆UUID併發生一次重複。換句話説,每秒產生10億筆UUID,100年後只產生一次重複的機率是50%。如果地球上每個人都各有6億筆UUID,發生一次重複的機率是50%。
產生重複UUID並造成錯誤的情況非常低,是故大可不必考慮此問題。