首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JavaScript 生成長位數隨機數的方法與 UUID 替代方案探討

     編輯:程式設計疑難解答

需求分析

在 Java 等後端語言中,常用 UUID 生成 32 位唯一標識。前端 JavaScript 原生 Math.random() 僅返回 0~1 之間的浮點數,精度有限,直接拼接易產生重複,且不包含 0 和 1 本身(左閉右開區間 [0, 1))。

常見方案對比

方案優點缺點適用場景
Date.now() 時間戳極簡單、基本不重複可預測、同毫秒內並發會衝突臨時 ID、日誌標記
Math.random() 拼接無依賴碰撞概率較高、非加密安全非關鍵業務隨機數
crypto.getRandomValues()加密級隨機、低碰撞舊瀏覽器不支援(IE11+ 支援)生產環境 UUID、Token
UUID 庫符合 RFC4122、功能豐富增加體積複雜項目

推薦實現:原生 Crypto API 生成 UUID v4

function generateUUID() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
    const r = crypto.getRandomValues(new Uint8Array(1))[0] % 16 | 0;
    return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
  });
}

結論

對於「位數比較多且不重複」的需求,優先使用 crypto.getRandomValues() 實現 UUID v4;若環境受限,時間戳 + 隨機數混合作為折衷方案。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved