JavaScript生成唯一ID的幾種常用方法
前言
在 JavaScript 中生成唯一 ID(UUID)的方法有很多,根據(jù)場(chǎng)景需求(如唯一性強(qiáng)度、長(zhǎng)度、可讀性等)可選擇不同方案。以下是幾種常用方法:
1. 簡(jiǎn)單方案:時(shí)間戳 + 隨機(jī)數(shù)(適合一般場(chǎng)景)
利用當(dāng)前時(shí)間戳(毫秒級(jí))結(jié)合隨機(jī)數(shù),實(shí)現(xiàn)簡(jiǎn)單且碰撞概率較低:
function generateSimpleId() {
// 時(shí)間戳(毫秒)+ 3位隨機(jī)數(shù),確保同一毫秒內(nèi)不重復(fù)
return Date.now().toString(36) + Math.random().toString(36).substr(2, 3);
}
// 使用示例
console.log(generateSimpleId()); // 類似:"1h8t0d3-xyz"(36進(jìn)制更短)
特點(diǎn):
- 實(shí)現(xiàn)簡(jiǎn)單,長(zhǎng)度較短(約12-15位);
- 適合前端臨時(shí)標(biāo)識(shí)(如DOM元素ID、臨時(shí)緩存鍵);
- 高并發(fā)下可能有極低碰撞風(fēng)險(xiǎn)(可增加隨機(jī)數(shù)長(zhǎng)度降低概率)。
2. 標(biāo)準(zhǔn) UUID v4(推薦,通用性強(qiáng))
UUID(通用唯一識(shí)別碼)是行業(yè)標(biāo)準(zhǔn),其中 v4 版本基于隨機(jī)數(shù)生成,碰撞概率極低(可忽略),格式為 8-4-4-4-12 共36位:
function generateUUID() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
const r = Math.random() * 16 | 0;
const v = c === 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
// 使用示例
console.log(generateUUID()); // 類似:"f47ac10b-58cc-4372-a567-0e02b2c3d479"
特點(diǎn):
- 符合 UUID 標(biāo)準(zhǔn),通用性強(qiáng)(后端、數(shù)據(jù)庫(kù)等場(chǎng)景兼容);
- 隨機(jī)數(shù)生成,碰撞概率極低(適合生產(chǎn)環(huán)境);
- 長(zhǎng)度固定(36位),包含連字符,可讀性較好。
3. 更安全的隨機(jī)數(shù)(基于 crypto API)
瀏覽器環(huán)境下可使用 crypto.getRandomValues 生成加密級(jí)隨機(jī)數(shù),進(jìn)一步降低碰撞風(fēng)險(xiǎn):
function generateSecureUUID() {
const array = new Uint8Array(16);
window.crypto.getRandomValues(array);
// 符合 UUID v4 格式:第6位固定為4,第8位固定為8-11之間的值
array[6] = (array[6] & 0x0f) | 0x40;
array[8] = (array[8] & 0x3f) | 0x80;
return Array.from(array, byte => ('0' + (byte & 0xff).toString(16)).slice(-2))
.join('')
.replace(/^(.{8})(.{4})(.{4})(.{4})(.{12})$/, '$1-$2-$3-$4-$5');
}
// 使用示例
console.log(generateSecureUUID()); // 標(biāo)準(zhǔn)UUID格式,隨機(jī)數(shù)更安全
特點(diǎn):
- 隨機(jī)數(shù)質(zhì)量更高(加密級(jí)),適合安全性要求高的場(chǎng)景(如token、會(huì)話ID);
- 需瀏覽器支持
cryptoAPI(幾乎所有現(xiàn)代瀏覽器都支持); - 仍符合 UUID 標(biāo)準(zhǔn)格式。
4. 短ID(適合需要短標(biāo)識(shí)的場(chǎng)景)
生成更短的唯一ID(如8-10位),可通過(guò)基數(shù)轉(zhuǎn)換(36進(jìn)制/62進(jìn)制)實(shí)現(xiàn):
function generateShortId(length = 8) {
const chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
let id = '';
for (let i = 0; i < length; i++) {
// 隨機(jī)取字符(使用crypto提高隨機(jī)性)
const randomIndex = Math.floor(window.crypto.getRandomValues(new Uint32Array(1))[0] / (0xFFFFFFFF + 1) * chars.length);
id += chars[randomIndex];
}
return id;
}
// 使用示例
console.log(generateShortId()); // 類似:"xY3p7Q9z"
特點(diǎn):
- 長(zhǎng)度可控(默認(rèn)8位,碰撞概率隨長(zhǎng)度增加而降低);
- 包含大小寫(xiě)字母和數(shù)字,可讀性較好;
- 適合URL參數(shù)、短鏈接等需要簡(jiǎn)短標(biāo)識(shí)的場(chǎng)景。
選擇建議:
- 一般前端場(chǎng)景:優(yōu)先用 UUID v4(通用且可靠);
- 高安全性場(chǎng)景:用 crypto 生成的 UUID;
- 短標(biāo)識(shí)需求:用 短ID生成函數(shù)(注意長(zhǎng)度與碰撞風(fēng)險(xiǎn)平衡);
- 簡(jiǎn)單臨時(shí)標(biāo)識(shí):用 時(shí)間戳+隨機(jī)數(shù)(實(shí)現(xiàn)最簡(jiǎn)單)。
這些方法基本能覆蓋大部分前端生成唯一ID的需求,可根據(jù)實(shí)際場(chǎng)景選擇。
總結(jié)
到此這篇關(guān)于JavaScript生成唯一ID的幾種常用方法的文章就介紹到這了,更多相關(guān)js生成唯一ID內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JavaScript?WebSocket實(shí)現(xiàn)實(shí)時(shí)雙向聊天
這篇文章主要為大家詳細(xì)介紹了如何基于JavaScript?WebSocket實(shí)現(xiàn)實(shí)時(shí)雙向聊天,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2024-04-04
詳解js中構(gòu)造流程圖的核心技術(shù)JsPlumb(2)
這篇文章主要介紹了js中構(gòu)造流程圖的核心技術(shù)JsPlumb,jsPlumb是一個(gè)強(qiáng)大的JavaScript連線庫(kù),它可以將html中的元素用箭頭、曲線、直線等連接起來(lái),適用于開(kāi)發(fā)Web上的圖表、建模工具等,需要的朋友可以參考下2015-12-12
element-ui組件輸入框之放大鏡搜索圖標(biāo)問(wèn)題
這篇文章主要介紹了element-ui組件輸入框之放大鏡(搜索圖標(biāo))的相關(guān)知識(shí),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-11-11
HTML5+Canvas實(shí)現(xiàn)圖片添加水印功能
在現(xiàn)代Web開(kāi)發(fā)中,圖像處理是一個(gè)常見(jiàn)的需求,尤其是為圖片添加水印,下面我們就來(lái)看看如何使用HTML5的Canvas技術(shù)為圖片添加水印,需要的可以了解下2024-11-11
javascript編程異常處理實(shí)例小結(jié)
這篇文章主要介紹了javascript編程異常處理的方法,結(jié)合實(shí)例形式分析總結(jié)了JavaScript編程中異常處理的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
javascript創(chuàng)建對(duì)象的3種方法
這篇文章主要介紹了javascript創(chuàng)建對(duì)象的3種方法,對(duì)比分析js創(chuàng)建對(duì)象三種方式的優(yōu)缺點(diǎn),感興趣的小伙伴們可以參考一下2016-11-11
JavaScript:Div層拖動(dòng)效果實(shí)例代碼
這篇文章介紹了JavaScript:Div層拖動(dòng)效果實(shí)例代碼,有需要的朋友可以參考一下2013-08-08
JavaScript實(shí)現(xiàn)拖拽和縮放效果
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)拖拽和縮放效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08

