js生成uuid



guid(全局惟一標識符)

描述:

Globally Unique Identifier,爲微軟實現的uuid。javascript

uuid(通用惟一標識符)

1.描述:

Universally Unique Identifier。前端

2.分類:

版本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

  • 若是你只須要一個惟一的ID,你想要一個版本1或版本4。
    • 版本1:這將基於網卡MAC地址和計時器生成惟一的ID。這些ID很容易預測(給出一個,我可能會猜到另外一個),能夠追溯到你的網卡。不建議建立這些。
    • 版本4:這些是從隨機(或僞隨機)數字生成的。若是你只須要生成一個UUID,這多是你想要的。
  • 若是你須要始終從給定名稱生成相同的UUID,則須要版本3或版本5。
    • 版本3:這將從名稱空間和名稱的MD5哈希生成一個惟一的ID。若是您須要向後兼容(使用另外一個從名稱生成UUID的系統),請使用此選項。
    • 版本5:這將從名稱空間和名稱的SHA-1哈希生成惟一的ID。這是首選版本。

3.生成

直接使用開源類庫uuid (github地址)。安全

npm i uuid
const uuidv1 = require('uuid/v1');
uuidv1(); //v1版本根據硬件信息(通常是網卡mac地址)和當前時間戳生成惟一性較高的uuid

或者由服務端生成返回前端

4.做用

惟一標識一條數據,通常可用做分佈式數據庫的主鍵。

5.衝突

uuid用有限字符標識無限的事物,理論上確定會發生重複。
每秒產生10億筆UUID,100年後只產生一次重複的機率是50%。若是地球上每一個人都各有6億筆GUID,發生一次重複的機率是50%。
產生重複GUID並形成錯誤的狀況很是低,是故大可沒必要考慮此問題。

參考資料

維基百科uuid

相關文章
相關標籤/搜索