通用唯一標識碼UUID的版本選擇和使用


通用唯一標識碼UUID的版本選擇和使用

一、簡介

UUID,是Universally Unique Identifier的縮寫,UUID出現的目的,是為了讓分佈式系統可以不借助中心節點,就可以生成UUID來標識一些唯一的信息;

GUID,是Globally Unique Identifier的縮寫,跟UUID是同一個東西,只是來源於微軟。

二、格式

UUID是由一組32位數的16進制數字所構成,是故UUID理論上的總數為16^32 = 2^128,約等於3.4 x 10^38。也就是說若每納秒產生1兆個UUID,要花100億年才會將所有UUID用完。

UUID的標準型式包含32個16進制數字,以連字號分為五段,形式為8-4-4-4-12的32個字符,如:550e8400-e29b-41d4-a716-446655440000。

三、組成:

UUID是指在一臺機器上生成的數字,它保證對在同一時空中的所有機器都是唯一的。通常平臺會提供生成的API。按照開放軟件基金會(OSF)制定的標準計算,用到了以太網卡地址、納秒級時間、芯片ID碼和許多可能的數字。

  • 當前日期和時間,UUID的第一個部分與時間有關,如果你在生成一個UUID之後,過幾秒又生成一個UUID,則第一個部分不同,其餘相同。
  • 時鐘序列。
  • 全局唯一的IEEE機器識別號,如果有網卡,從網卡MAC地址獲得,沒有網卡以其他方式獲得。

UUID的唯一缺陷在於生成的結果串會比較長。關於UUID這個標準使用最普遍的是微軟的GUID(Globals Unique Identifiers)。

四、UUID的版本


標準格式

UUID的格式是這樣的:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

N那個位置,只會是8,9,a,b

M那個位置,代表版本號,由於UUID的標準實現有5個版本,所以只會是1,2,3,4,5


版本1:基於時間的UUID

通過當前時間戳、機器MAC地址生成;

由於在算法中使用了MAC地址,這個版本的UUID可以保證在全球範圍的唯一性。

但與此同時,因為它暴露了電腦的MAC地址和生成這個UUID的時間,這就是這個版本UUID被詬病的地方。


版本2:DCE安全的UUID

DCE安全的UUID和基於時間的UUID算法相同,但會把時間戳的前4位置換為POSIX的UID或GID。

不過,在UUID的規範裡面沒有明確地指定,所以基本上所有的UUID實現都不會實現這個版本。


版本3:基於名字空間的UUID(MD5)

由用戶指定1個namespace和1個具體的字符串,通過MD5散列,來生成1個UUID;

根據規範描述,這個版本的存在是為了向後兼容?平時這個版本我們也很少用到


版本4:基於隨機數的UUID

根據隨機數,或者偽隨機數生成UUID。這種UUID產生重複的概率是可以計算出來的,但隨機的東西就像是買彩票:你指望它發財是不可能的,但狗屎運通常會在不經意中到來。這個版本應該是平時大家無意中用得最多的版本了;


版本5:基於名字空間的UUID(SHA1)

和版本3一樣,不過散列函數換成了SHA1

五、版本選擇

  • V4 - 首選
  • V1 - 如果需要反向解析主機 Mac 地址
  • V5 - 如果需要根據特定的值生成,而且在值不變的情況下生成的 UUID 不變。通知值很難破解出密碼原文。
  • V3 - 不推薦,用 V5 替代

V2 - 一般不會用到

六、php代碼實現


通用唯一標識碼UUID的版本選擇和使用


通用唯一標識碼UUID的版本選擇和使用


通用唯一標識碼UUID的版本選擇和使用


通用唯一標識碼UUID的版本選擇和使用


分享到:


相關文章: