LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

【JavaScript】一行代碼生成絕對唯一 ID?別再用 Date.now() 了 !

admin
2025年7月14日 16:19 本文熱度 694

我們總會遇到需要生成“唯一ID”的場景,“唯一ID”這個需求看似簡單,但要實現一個絕對不會重復的 ID,卻比想象中要復雜。

誤區一:嘗試 (Date.now() + Math.random())

很多初學者(甚至一些老手)的直覺反應是:時間戳 + 隨機數

function generateNaiveId() {
    return Date.now().toString(36) + Math.random().toString(36).substr(2);
}

// 示例輸出: "l6n7f4v2am50k9m7o4"

這個方法看起來不錯,結合了時間的唯一性和隨機性。但在高并發或快速操作的場景下,它的“絕對唯一”承諾不堪一擊:

  1. 時間戳精度問題Date.now() 的精度是毫秒,如果在同一毫秒內調用兩次 generateNaiveId(),ID 的前半部分就會完全一樣
  2. 偽隨機性Math.random() 產生的不是真正的“加密級”隨機數,在極小的概率下,它也可能在短時間內生成重復的序列

結論: 這種方法在低頻次場景下“似乎”可用,但它離“絕對唯一”相去甚遠,是生產環境中的一顆定時炸彈。

誤區二:簡單的自增計數器

另一個思路是維護一個全局計數器。

這個方案的缺陷更加明顯:

  1. 無狀態性:瀏覽器環境是無狀態的,用戶一刷新頁面,counter 就重置為 0
  2. 多標簽頁沖突:用戶打開兩個相同的頁面,每個頁面都有一個獨立的 counter,它們會從 0 開始生成完全相同的 ID 序列,導致立刻沖突

結論: 純粹的自增計數器方案,在瀏覽器環境中幾乎沒有任何實用價值。

擁抱密碼學和標準

既然簡單的方法都行不通,我們需要更可靠、更科學的武器。幸運的是,瀏覽器(Node.js14+)已經為我們內置了這樣的武器。

王者方案:crypto.randomUUID()

這是 W3C 標準和現代瀏覽器提供的官方解決方案crypto 是一個瀏覽器內置的全局對象,提供了加密相關的能力,而 randomUUID() 方法專門用于生成一個符合 RFC 4122 v4 規范的通用唯一標識符(UUID)。

const uniqueId = crypto.randomUUID();

// 示例輸出: "3a6c4b2a-4c26-4d0f-a4b7-3b1a2b3c4d5e"

為什么 crypto.randomUUID() 是王者?

  1. 極低的碰撞概率:一個 v4 UUID 是由 122 位的隨機數生成的,其組合數量是一個天文數字,碰撞概率趨近于零
  2. 加密級安全:它使用密碼學安全偽隨機數生成器(CSPRNG),其隨機性遠非 Math.random() 可比,無法被預測
  3. 標準化:它生成的是全球公認的標準格式,無論前端、后端還是數據庫,都能識別和處理
  4. 原生、簡單、高效:無需引入任何第三方庫,一行代碼即可調用,性能極高

crypto.randomUUID() 已經得到了所有現代主流瀏覽器的支持(Chrome 92+, Firefox 90+, Safari 15.4+, Node.js14+)。對于絕大多數新項目而言,可以放心使用。


該文章在 2025/7/14 16:19:18 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
亚洲成Aⅴ人的天堂在线观看女人 | 中文字幕连续高潮 | 亚洲欧美日韩高清专区一 | 亚洲性爱女色在线视频 | 日本精品视频区 | 亚洲人成网站在线播放2019 |