Globally Unique Identifier,爲微軟實現的uuid。javascript
Universally Unique Identifier。前端
版本:java
UUID Version 1:基於時間的UUID
基於時間的UUID經過計算當前時間戳、機器MAC地址、隨機數和獲得。因爲在算法中使用了MAC地址,這個版本的UUID能夠保證在全球範圍的惟一性。但與此同時,使用MAC地址會帶來安全性問題,這就是這個版本UUID受到批評的地方。若是應用只是在局域網中使用,也可使用退化的算法,以IP地址來代替MAC地址--Java的UUID每每是這樣實現的(固然也考慮了獲取MAC的難度)。node
UUID Version 2:DCE安全的UUID
DCE(Distributed Computing Environment)安全的UUID和基於時間的UUID算法相同,但會把時間戳的前4位置換爲POSIX的UID或GID。這個版本的UUID在實際中較少用到。git
UUID Version 3:基於名字的UUID(MD5)
基於名字的UUID經過計算名字和名字空間的MD5散列值獲得。這個版本的UUID保證了:相同名字空間中不一樣名字生成的UUID的惟一性;不一樣名字空間中的UUID的惟一性;相同名字空間中相同名字的UUID重複生成是相同的。github
UUID Version 4:隨機UUID
根據隨機數,或者僞隨機數生成UUID。這種UUID產生重複的機率是能夠計算出來的,但隨機的東西就像是買彩票:你期望它發財是不可能的,但狗屎運一般會在不經意中到來。算法
UUID Version 5:基於名字的UUID(SHA1)
和版本3的UUID算法相似,只是散列值計算使用SHA1(Secure Hash Algorithm 1)算法。數據庫
如何選擇:npm
直接使用開源類庫uuid (github地址)。安全
npm i uuid
const uuidv1 = require('uuid/v1'); uuidv1(); //v1版本根據硬件信息(通常是網卡mac地址)和當前時間戳生成惟一性較高的uuid
或者由服務端生成返回前端
惟一標識一條數據,通常可用做分佈式數據庫的主鍵。
uuid用有限字符標識無限的事物,理論上確定會發生重複。
每秒產生10億筆UUID,100年後只產生一次重複的機率是50%。若是地球上每一個人都各有6億筆GUID,發生一次重複的機率是50%。
產生重複GUID並形成錯誤的狀況很是低,是故大可沒必要考慮此問題。