通用唯一識別碼

通用唯一識別碼

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

基本介紹

  • 中文名:通用唯一識別碼
  • 外文名:Universally Unique Identifier
  • 簡稱:UUID
  • 領域:計算機
簡介,定義,格式,隨機UUID的重複機率,

簡介

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

定義

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。

格式

在規範字元串格式中,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。

隨機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並造成錯誤的情況非常低,是故大可不必考慮此問題。
機率也與隨機數產生器的品質有關。若要避免重複機率提高,必須要使用基於密碼學上的假隨機數產生器來生成值才行。

相關詞條

熱門詞條

聯絡我們