根據(jù) RFC 4122涉馅,UUID(通用唯一標識符)也稱為 GUID(全局唯一標識符),是設計用于提供特定唯一性保證的標識符。
雖然可以在幾行 JavaScript 代碼中實現(xiàn)符合 RFC 兼容的 UUID儿咱,但有幾個常見的陷阱:
- 無效的 ID 格式(UUID 的格式必須為
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
颁独,其中 x 是 [0-9] 或 [a-f] 之一,M 是 [1-5] 之一吨枉,N 是 [8蹦渣、9、a 或 b]貌亭。 - 使用低質量的隨機源(例如
Math.random
)
因此柬唯,鼓勵為生產(chǎn)環(huán)境編寫代碼的開發(fā)人員使用嚴格的、維護良好的實現(xiàn)圃庭,例如 uuid
模塊锄奢。它還有另外一個競品 NanoID,很多用過的都說沒有明顯的缺點或限制剧腻。
另外野瘦,Node.js 中的 crypto
模塊有一個 randomUUID()
方法可以生成 UUID央渣。它是一個新的標準武通,且受到越來越多的瀏覽器支持畔勤。
const crypto = require('crypto')
crypto.randomUUID() // bb2c6a75-b373-4c24-a3c3-1fb0911a8a25
如果這兩種方法都不適用于您,還有以下最原始的方法:
function uuidv4() {
return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c) =>
(
c ^
(crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))
).toString(16)
)
}
uuidv4() // 'ab399796-c3b4-4329-903a-4db62af83a17'
但強烈建議不要使用任何依賴 Math.random()
的 UUID 生成器蕊温「は洌基于 Math.random()
的解決方案不能提供良好的唯一性保證遏乔。點擊查看詳情