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