JavaScript中創(chuàng)建GUID/UUID的方法及實(shí)現(xiàn)步驟
JavaScript中創(chuàng)建GUID/UUID的方法
技術(shù)背景
在JavaScript開發(fā)中,有時(shí)需要生成全局唯一標(biāo)識(shí)符(GUID)或通用唯一識(shí)別碼(UUID)。GUID/UUID是一種由數(shù)字和字母組成的標(biāo)識(shí)符,通常為32或36個(gè)字符,用于確保在全球范圍內(nèi)的唯一性。這些標(biāo)識(shí)符在數(shù)據(jù)庫(kù)、分布式系統(tǒng)、網(wǎng)絡(luò)通信等領(lǐng)域有著廣泛的應(yīng)用。然而,JavaScript本身并沒有直接提供生成GUID/UUID的內(nèi)置方法,因此需要開發(fā)者自己實(shí)現(xiàn)或使用第三方庫(kù)。
實(shí)現(xiàn)步驟
1. 使用crypto.randomUUID()
在現(xiàn)代瀏覽器和JS運(yùn)行時(shí)中,crypto.randomUUID()是生成RFC4122-compliant UUID的標(biāo)準(zhǔn)方法。但該方法僅適用于本地(localhost或127.0.0.1)或通過(guò)HTTPS提供服務(wù)的頁(yè)面。
const uuid = crypto.randomUUID(); console.log(uuid);
2. 使用uuid模塊
對(duì)于舊版平臺(tái)或非安全上下文,uuid模塊是一個(gè)不錯(cuò)的選擇。它經(jīng)過(guò)了充分的測(cè)試和支持,可以生成不同版本的UUID。
安裝:
npm install uuid
使用示例:
const { v4: uuidv4 } = require('uuid');
const uuid = uuidv4();
console.log(uuid);3. 自定義實(shí)現(xiàn)
如果不想依賴第三方庫(kù),也可以自己實(shí)現(xiàn)一個(gè)簡(jiǎn)單的UUID生成函數(shù)。以下是一個(gè)基于原始答案的實(shí)現(xiàn):
function uuidv4() {
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
(+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)
);
}
console.log(uuidv4());核心代碼
自定義UUID生成函數(shù)
function uuidv4() {
return "10000000-1000-4000-8000-100000000000".replace(/[018]/g, c =>
(+c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> +c / 4).toString(16)
);
}使用uuid模塊生成UUID
const { v4: uuidv4 } = require('uuid');
const uuid = uuidv4();
console.log(uuid);最佳實(shí)踐
- 優(yōu)先使用標(biāo)準(zhǔn)方法:如果你的項(xiàng)目運(yùn)行在支持
crypto.randomUUID()的環(huán)境中,優(yōu)先使用該方法,因?yàn)樗菢?biāo)準(zhǔn)且安全的。 - 使用成熟的第三方庫(kù):對(duì)于需要兼容舊版平臺(tái)或非安全上下文的項(xiàng)目,使用
uuid模塊可以確保生成的UUID符合RFC4122標(biāo)準(zhǔn)。 - 避免使用
Math.random():基于Math.random()的UUID生成方法不能提供良好的唯一性保證,因此不建議在生產(chǎn)環(huán)境中使用。
常見問題
1. crypto.randomUUID()在某些環(huán)境中不可用
crypto.randomUUID()僅適用于本地(localhost或127.0.0.1)或通過(guò)HTTPS提供服務(wù)的頁(yè)面。如果在其他環(huán)境中使用,會(huì)導(dǎo)致該方法不可用。此時(shí)可以考慮使用uuid模塊或自定義實(shí)現(xiàn)。
2. 基于Math.random()的UUID生成方法存在碰撞風(fēng)險(xiǎn)
Math.random()生成的隨機(jī)數(shù)質(zhì)量較低,不能保證生成的UUID的唯一性。因此,在對(duì)唯一性要求較高的場(chǎng)景中,應(yīng)避免使用基于Math.random()的UUID生成方法。
3. 不同版本的UUID有什么區(qū)別
根據(jù)RFC 4122標(biāo)準(zhǔn),UUID有不同的版本,常見的有版本1(基于時(shí)間)、版本4(基于隨機(jī)數(shù))和版本5(基于命名空間和名稱)。版本4是最常用的版本,它基于隨機(jī)數(shù)生成,具有較高的唯一性。
到此這篇關(guān)于JavaScript中創(chuàng)建GUID/UUID的方法及實(shí)現(xiàn)步驟的文章就介紹到這了,更多相關(guān)js 創(chuàng)建guid和uuid內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
layui radio點(diǎn)擊事件實(shí)現(xiàn)input顯示和隱藏的例子
今天小編就為大家分享一篇layui radio點(diǎn)擊事件實(shí)現(xiàn)input顯示和隱藏的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09
javascript關(guān)于運(yùn)動(dòng)的各種問題經(jīng)典總結(jié)
這篇文章主要介紹了javascript關(guān)于運(yùn)動(dòng)的各種問題,實(shí)例總結(jié)了javascript關(guān)于滾動(dòng)的常見錯(cuò)誤、實(shí)現(xiàn)方法與相關(guān)注意事項(xiàng),非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
JS如何實(shí)現(xiàn)網(wǎng)站中PC端和手機(jī)端自動(dòng)識(shí)別并跳轉(zhuǎn)對(duì)應(yīng)的代碼
這篇文章主要介紹了JS如何實(shí)現(xiàn)網(wǎng)站中PC端和手機(jī)端自動(dòng)識(shí)別并跳轉(zhuǎn)對(duì)應(yīng)的代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01
js實(shí)現(xiàn)可以點(diǎn)擊收縮或張開的懸浮窗
這篇文章主要介紹了js實(shí)現(xiàn)可以點(diǎn)擊收縮或張開的懸浮窗效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
javascript css在IE和Firefox中區(qū)別分析
我們討論的主題CSS網(wǎng)頁(yè)布局,最令大家頭疼的問題就是瀏覽器兼容性,雖然52CSS.com介紹過(guò)很多這方向的知識(shí),但依然讓很多開發(fā)人員暈頭轉(zhuǎn)向,今天的這篇文章,將列出css和javascript在IE和Firefox中二十三個(gè)不同點(diǎn),希望對(duì)大家的學(xué)習(xí)有所幫助。2009-02-02
JavaScript格式化日期時(shí)間的方法和自定義格式化函數(shù)示例
JavaScript默認(rèn)的時(shí)間格式我們一般情況下不會(huì)用,所以需要進(jìn)行格式化,下面說(shuō)說(shuō)我總結(jié)的JavaScript時(shí)間格式化方法2014-04-04
Javascript中函數(shù)分類&this指向的實(shí)例詳解
其實(shí)想要徹底理解js中this的指向,不必硬背,這篇文章主要給大家介紹了關(guān)于Javascript中函數(shù)分類&this指向的相關(guān)資料,需要的朋友可以參考下2021-05-05
JSON.parse()和JSON.stringify()使用介紹
這篇文章主要介紹了JSON.parse()和JSON.stringify()使用,需要的朋友可以參考下2014-06-06
我遇到的參數(shù)傳遞中 雙引號(hào)單引號(hào)嵌套問題
我遇到的參數(shù)傳遞中 雙引號(hào)單引號(hào)嵌套問題2010-02-02

