如何在 JavaScript 中创建 GUID(全局唯一标识符)? GUID/UUID 应至少为 32 个字符,并且应保持在 ASCII 范围内,以避免传递它们时出现麻烦。
我不确定所有浏览器上都可以使用哪些例程,内置随机数生成器的“随机性”和播种方式等等。
最佳答案
[于 2023 年 3 月 5 日编辑,以反射(reflect)生成符合 RFC4122 的 UUID 的最新最佳实践]
crypto.randomUUID()
现在是所有现代浏览器和 JS 运行时的标准。然而,因为new browser APIs are restricted to secure contexts ,此方法仅适用于本地(localhost
或 127.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 here 。 TL;DR:基于 Math.random()
的解决方案无法提供良好的唯一性保证。
关于javascript - 如何创建 GUID/UUID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21097620/