.jpg)
如何在 JavaScript 中创建 GUID(全局唯一标识符)?GUID / UUID 应至少为 32 个字符,并且应保持在 ASCII 范围内,以避免在传递它们时出现问题。
我不确定所有浏览器上都有哪些可用的例程,内置随机数生成器的“随机”和种子有多“等。

网友回答:
根据 RFC 4122,UUID(通用唯一标识符),也称为 GUID(全局唯一标识符),是旨在提供某些唯一性保证的标识符。
虽然可以在几行JavaScript代码中实现符合RFC的UUID(例如,请参阅下面的@broofa的答案),但有几个常见的陷阱:
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxxMath.random)因此,鼓励为生产环境编写代码的开发人员使用严格、维护良好的实现,例如 uuid 模块。

网友回答:
[2021-10-16 编辑,以反映生成符合 RFC4122 标准的 UUID 的最新最佳实践]
这里的大多数读者都希望使用该模块。它经过了良好的测试和支持。uuid
该功能是 Node 支持的新兴标准.js并且越来越多的浏览器都支持此功能。但是,由于新的浏览器 API 仅限于安全上下文,因此此方法仅适用于本地(或)或通过 HTTPS 提供的页面。如果您有兴趣看到此限制被取消,可以关注此 GitHub 问题。crypto.randomUUID()localhost127.0.0.1crypto.randomUUID()
如果这些都不适合您,则有此方法(基于此问题的原始答案):
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 生成器(包括此答案的先前版本中的片段),原因最好在这里解释。DR:基于的解决方案不能提供良好的唯一性保证。Math.random()

网友回答:
我真的很喜欢Broofa的答案是多么干净,但不幸的是,糟糕的实现留下了碰撞的机会。Math.random
下面是一个类似的 RFC4122 版本 4 兼容解决方案,它通过将前 13 个十六进制数字偏移时间戳的十六进制部分来解决此问题,并且一旦耗尽自页面加载以来微秒的十六进制部分偏移量。这样,即使在同一种子上,两个客户端也必须生成自页面加载以来完全相同的微秒数(如果支持高性能时间)并且完全相同的毫秒数(或 10,000+ 年后)才能获得相同的 UUID:Math.random
function generateUUID() { // Public Domain/MIT
var d = new Date().getTime();//Timestamp
var d2 = ((typeof performance !== 'undefined') && performance.now && (performance.now()*1000)) || 0;//Time in microseconds since page-load or 0 if unsupported
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16;//random number between 0 and 16
if(d > 0){//Use timestamp until depleted
r = (d + r)%16 | 0;
d = Math.floor(d/16);
} else {//Use microseconds since page-load if supported
r = (d2 + r)%16 | 0;
d2 = Math.floor(d2/16);
}
return (c === 'x' ? r : (r & 0x3 | 0x8)).toString(16);
});
}
var onClick = function(){
document.getElementById('uuid').textContent = generateUUID();
}
onClick();
#uuid { font-family: monospace; font-size: 1.5em; }
<p id="uuid"></p>
<button id="generateUUID" onclick="onClick();">Generate UUID</button>
这是一个要测试的小提琴。
const generateUUID = () => {
let
d = new Date().getTime(),
d2 = ((typeof performance !== 'undefined') && performance.now && (performance.now() * 1000)) || 0;
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
let r = Math.random() * 16;
if (d > 0) {
r = (d + r) % 16 | 0;
d = Math.floor(d / 16);
} else {
r = (d2 + r) % 16 | 0;
d2 = Math.floor(d2 / 16);
}
return (c == 'x' ? r : (r & 0x7 | 0x8)).toString(16);
});
};
const onClick = (e) => document.getElementById('uuid').textContent = generateUUID();
document.getElementById('generateUUID').addEventListener('click', onClick);
onClick();
#uuid { font-family: monospace; font-size: 1.5em; }
<p id="uuid"></p>
<button id="generateUUID">Generate UUID</button>
模板简介:该模板名称为【如何创建 GUID / UUID?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【JavaScript】栏目查找您需要的精美模板。