javascript - 如何创建 GUID/UUID?

标签 javascript guid uuid

如何在 JavaScript 中创建 GUID(全局唯一标识符)? GUID/UUID 应至少为 32 个字符,并且应保持在 ASCII 范围内,以避免传递它们时出现麻烦。

我不确定所有浏览器上都可以使用哪些例程,内置随机数生成器的“随机性”和播种方式等等。

最佳答案

[于 2023 年 3 月 5 日编辑,以反射(reflect)生成符合 RFC4122 的 UUID 的最新最佳实践]

crypto.randomUUID()现在是所有现代浏览器和 JS 运行时的标准。然而,因为new browser APIs are restricted to secure contexts ,此方法仅适用于本地(localhost127.0.0.1)或通过 HTTPS 提供的页面。

对于对其他 UUID 版本、在旧平台或非安全环境中生成 UUID 感兴趣的读者,有 the uuid module 。它经过了充分的测试和支持。

如果上述方法失败,还有这个方法(基于这个问题的原始答案):

function uuidv4() {
  return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c =>
    (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16)
  );
}

console.log(uuidv4());

注意:强烈建议不要使用依赖于 Math.random()任何 UUID 生成器(包括此答案之前版本中的片段)reasons best explained hereTL;DR:基于 Math.random() 的解决方案无法提供良好的唯一性保证。

关于javascript - 如何创建 GUID/UUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21097620/

相关文章:

node.js - 部署到云时无法将实体添加到 Node.js 中的 Azure 存储表中?

php - 在 PHP 中生成唯一 ID

c# - 根据字符串生成UUID

javascript - Google pagespeed 显示渲染阻塞,甚至进入 body 部位

javascript - jquery 图像 slider 导航点不起作用

math - 猜测(匹配)一个 Guid 的概率是多少?

postgresql - 修改 Devise 以支持 UUID 主键

java - ANDROID_ID 有问题

javascript - 释放 JavaScript 对象

javascript - 如何将动态添加的输入字段关联到父元素/id?