实战问题
如何创建 GUID/UUID?
我正在尝试在 JavaScript 中创建全局唯一标识符。我不确定所有浏览器上都有哪些例程,内置随机数生成器的“随机”和种子如何等等。
GUID / UUID 应至少为 32 个字符,并且应保持在 ASCII 范围内以避免在传递它们时出现问题。
解决方案
UUID(通用唯一标识符),也称为 GUID(全局唯一标识符),根据RFC 4122,是旨在提供某些唯一性保证的标识符。
虽然可以在几行 JavaScript 代码中实现符合 RFC 的 UUID(例如,请参阅下面的@broofa 的回答),但有几个常见的陷阱:
无效的 id 格式(UUID 必须采用“ xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx”形式,其中 x 是 [0-9, af] 之一M是 [1-5] 之一,N是 [8, 9, a 或 b]
使用低质量的随机源(例如Math.random)
因此,鼓励为生产环境编写代码的开发人员使用严格、维护良好的实现,例如uuid模块
对于符合RFC4122版本 4 的解决方案,这种单行(ish)解决方案是我能想到的最紧凑的:
function uuidv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
return v.toString(16);
});
}
console.log(uuidv4());