複製鏈接
請複製以下鏈接發送給好友

通用唯一識別碼

鎖定
通用唯一識別碼(英語:Universally Unique Identifier,簡稱UUID)是一種軟件建構的標準,亦為開放軟件基金會組織在分佈式計算環境領域的一部分。
中文名
通用唯一識別碼
外文名
Universally Unique Identifier
簡    稱
UUID
領    域
計算機

通用唯一識別碼簡介

UUID的目的是讓分佈式系統中的所有元素都能有唯一的辨識信息,而不需要透過中央控制端來做辨識信息的指定。如此一來,每個人都可以創建不與其它人衝突的UUID。在這樣的情況下,就不需考慮數據庫創建時的名稱重複問題。目前應用最廣泛的UUID是微軟公司的全局唯一標識符(GUID),而其他重要的應用,則有Linuxext2/ext3文件系統、LUKS加密分區、GNOMEKDEmacOS等。另外,也可以在e2fsprogs包中的UUID庫找到實現。 [1] 

通用唯一識別碼定義

UUID是由一組32位數的16進制數字所構成,是故UUID理論上的總數為16=2,約等於3.4 x 10。也就是説若每納秒產生1個UUID,要花100億年才會將所有UUID用完。
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並造成錯誤的情況非常低,是故大可不必考慮此問題。
機率也與隨機數產生器的品質有關。若要避免重複機率提高,必須要使用基於密碼學上的假隨機數產生器來生成值才行。 [2] 
參考資料
  • 1.    Old Farmer's Almanac 1994, 220-222, Taking your Chances: An Explanation of Risk
  • 2.    "DCE 1.1: Authentication and Security Services". The Open Group. 1997.