通用唯一識別碼 (Universally Unique IDentifier, UUID) 或是全域唯一識別碼 (Globally Unique IDentifier, GUID) 是一個 128 bits 的整數,並保證其在時間與空間的分佈都是獨一無二的。UUID 由開放軟體基金會 (OSF) 標準化後用在他們的 DCE 系統上,後來在微軟的 COM 系統上發揚光大。除此之外在許多地方也都可以看到 UUID 的身影,如 Linux 上的分割表/區塊裝置就是以 UUID 來標示,或是 RSS 的
標籤也可以使用 UUID,實際上 UUID 是標準的 URN 表示法之一,你可以在任何需要標示單一物件的地方使用 UUID。
UUID 的文字形式為一個
8-4-4-4-12
的十六進位表示,共有 16 個 bytes,有人說使用 UUID 不方便人類辨識,但了解 UUID 的組成後你還是可以從這個表示法看出一些端倪來。本文參考的是 IETF 版本的 RFC 4122。
UUID 共有四個版本,第 13 個字元的位置就是表示版本號。第一種是以時間和網路卡號組成,時間是以一百奈秒為單位,網路卡號理論上是不會重複的,再加上
clock_seq
這個每次開機重設一次的亂數欄位,就算時間回朔了也不會重複,代號是 1。第二種和第四種是以命名空間加上一個 hash 組成的,分別可以使用MD5 或是 SHA1 演算法,算出來後就填到空位中,代號是 3 跟 5。第三種是全亂數組成,代號是 4。
因此我們可以在不同的情境選用不同的 UUID,也可以從 UUID 看出版本跟時間等資訊,如
4ef17586-f187-11df-8xxx-xxxxxxxxxxxx
看到第三個區塊是 11df
就可以知道是最近產生的以時間卡號為基礎的 UUID,時間 1dff1874ef17586
解出來就是 2010-11-16 13:42:09.173031.0 UTC。而 7c0fdbe4-1b09-4278-9fc9-5f0c6a1f2ae2
就是純亂數的 UUID,沒有任何意義。