如何创建 GUID/UUID?
2022-08-29 21:45:30
如何在 JavaScript 中创建 GUID(全局唯一标识符)?GUID / UUID应至少为32个字符,并应保持在ASCII范围内,以避免在传递它们时出现问题。
我不确定所有浏览器上都有哪些例程,内置随机数生成器的“随机”和种子化程度,等等。
如何在 JavaScript 中创建 GUID(全局唯一标识符)?GUID / UUID应至少为32个字符,并应保持在ASCII范围内,以避免在传递它们时出现问题。
我不确定所有浏览器上都有哪些例程,内置随机数生成器的“随机”和种子化程度,等等。
[编辑于 2021-10-16 以反映生成符合 RFC4122 标准的 UUID 的最新最佳实践]
这里的大多数读者都希望使用uuid
模块。它经过了充分的测试和支持。
crypto.randomUUID()
函数是 Node.js和越来越多的浏览器都支持的新兴标准。
如果这些都不适合您,则有此方法(基于此问题的原始答案):
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 生成器(包括此答案的以前版本中的片段),原因在这里得到了最好的解释。TL;DR:基于 Math.random() 的解决方案不能提供良好的唯一性保证。
根据 RFC 4122,UUID(通用唯一标识符),也称为 GUID(全局唯一标识符),是旨在提供某些唯一性保证的标识符。
虽然可以在几行JavaScript代码中实现符合RFC的UUID(例如,请参阅下面@broofa的答案),但有几个常见的陷阱:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Math.random
)因此,鼓励为生产环境编写代码的开发人员使用严格、维护良好的实现,如 uuid 模块。