本文打印版下載地址
1腺律、UUID的定義
UUID是通用唯一識別碼(Universally Unique Identifier)的縮寫,是一種軟件建構(gòu)的標(biāo)準(zhǔn)辽俗,是開放軟件基金會組織在分布式計算環(huán)境領(lǐng)域的一部分疾渣。其目的是讓分布式系統(tǒng)中的所有元素,都能有唯一的辨識信息崖飘,而不需要通過中央控制端來做辨識信息的指定榴捡。
UUID用來識別屬性類型,在所有空間和時間上被視為唯一的標(biāo)識朱浴,任何地方產(chǎn)生的任意一個UUID都不會有相同的值吊圾。UUID的唯一缺陷在于生成的結(jié)果串會比較長,是一個128比特的數(shù)值翰蠢。
目前最廣泛應(yīng)用的 UUID项乒,即是微軟的 Microsoft's Globally Unique Identifiers (GUIDs),而其他重要的應(yīng)用梁沧,則有 Linux ext2/ext3 檔案系統(tǒng)檀何、LUKS 加密分割區(qū)、GNOME、KDE频鉴、Mac OS X 等等栓辜。
2、UUID的組成
UUID基于當(dāng)前時間垛孔、計數(shù)器(counter)和硬件標(biāo)識(通常為無線網(wǎng)卡的MAC地址)等數(shù)據(jù)計算生成藕甩。
(1)當(dāng)前日期和時間:UUID的第一個部分與時間有關(guān)。
(2)時鐘序列周荐。
(3)全局唯一的IEEE機器識別號:如果有網(wǎng)卡狭莱,從網(wǎng)卡MAC地址獲得,沒有網(wǎng)卡以其他方式獲得概作。
(4)Java Hibernate中:采用IP-JVM啟動時間-當(dāng)前時間右移32位-當(dāng)前時間-內(nèi)部計數(shù)(8-8-4-8-4)來組成UUID腋妙。
3、UUID的編碼規(guī)則
UUID全局唯一標(biāo)識符定義為一個字符串主鍵仆嗦,采用32位數(shù)字組成辉阶,編碼采用16進制,定義了在時間和空間都完全惟一的系統(tǒng)信息瘩扼。
(1)1-8位采用系統(tǒng)時間,在系統(tǒng)時間上精確到毫秒級保證時間上的惟一性垃僚;
(2)9-16位采用底層的IP地址集绰,在服務(wù)器集群中的惟一性;
(3)17-24位采用當(dāng)前對象的HashCode值谆棺,在一個內(nèi)部對象上的惟一性栽燕;
(4)25-32位采用調(diào)用方法的一個隨機數(shù),在一個對象內(nèi)的毫秒級的惟一性改淑。
4碍岔、UUID的版本
UUID具有多個版本,每個版本的算法不同朵夏,應(yīng)用范圍也不同蔼啦。
(1)特例Nil UUID:通常用不到,由全為0的數(shù)字組成:00000000-0000-0000-0000-000000000000仰猖。
(2)基于時間的UUID
① 基于時間的UUID通過計算當(dāng)前時間戳捏肢、隨機數(shù)和機器MAC地址得到。
② 在算法中使用了MAC地址饥侵,保證了UUID在全球范圍的唯一性鸵赫,但會帶來安全性問題。
③ 使用退化的算法躏升,以IP地址來代替MAC地址--Java的UUID這樣實現(xiàn)的辩棒。
(3)DCE安全的UUID(Distributed Computing Environment)
DCE安全的UUID和基于時間的UUID算法相同,但會把時間戳的前4位置換為POSIX的UID或GID。這個版本的UUID在實際中較少用到一睁。
(4)基于名字的UUID
① 基于名字的UUID(MD5):通過計算名字和名字空間的MD5散列值得到藕赞。
② 基于名字的UUID(SHA1):通過計算名字和名字空間的SHA1散列值得到。
-
③ 基于名字的UUID保證了UUID的唯一性:
? 相同名字空間中不同名字生成的UUID的唯一性卖局;
? 不同名字空間中的UUID的唯一性斧蜕;
? 相同名字空間中相同名字的UUID重復(fù)生成是相同的。
(5)隨機UUID:根據(jù)隨機數(shù)砚偶,或者偽隨機數(shù)生成UUID批销,這種UUID產(chǎn)生重復(fù)的概率是可以計算出來的。
參考資料: 《百度百科-UUID》
免責(zé)聲明:本文是對《百度百科-UUID》的個人學(xué)習(xí)總結(jié)染坯,屬于個人的學(xué)習(xí)筆記均芽,僅用于學(xué)習(xí)和分享交流,不涉及商業(yè)用途单鹿。如果本文發(fā)布的內(nèi)容侵犯到相關(guān)的權(quán)益掀宋,請及時聯(lián)系本人進行刪除!