gpt4 book ai didi

javascript - javascript 生成的 uuid 有多独特和随机?

转载 作者:行者123 更新时间:2023-11-28 01:21:52 24 4
gpt4 key购买 nike

我正在考虑使用讨论的 uuid 方法之一为 javascript 中的数据生成唯一标识符 here 。最有可能是类似 this one 的内容因为它使用 window.crypto(如果可用)。

这些 ID 不需要全局唯一,只需每个用户唯一。这会为大规模应用程序生成足够唯一的 ID 吗?有没有理由认为这会导致 id 冲突? javascript 可以生成一个足够随机的 uuid 来使其工作吗?看起来 window.crypto 已经相当广泛地可用,并且这个特定项目已经需要相当现代的浏览器。

更多信息:有关该问题的一些背景信息可以找到 here

最佳答案

摘自 this answer 的评论:

... (cont'd) The odds of two IDs generated by this function colliding are, literally, astronomically small. All but 6 of the 128 bits of the ID are randomly generated, which means that for any two ids, there's a 1 in 2^^122 (or 5.3x10^^36) chance they'll collide. – broofa

碰撞几率为 5,316,911,983,139,663,491,615,228,241,121,378,304(5.3 十一亿)分之一。

还要确保当用户尝试使用此 uuid 创建新记录时验证该 uuid 尚未被使用。这属于从不信任用户输入的更大策略。

如果您不相信,您还可以测试此生成器:

function getUUID() {
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);
});
}

var uuids = [];
var last;
var numGenerated = 0;
do {
last = getUUID();
if (uuids.indexOf(last) === -1) {
uuids.push(last);
numGenerated++;
console.log(numGenerated);
} else {
break;
}
} while (true);

console.log('Got collision after ' + numGenerated + ' generated UUIDS.');

我现在正在 Node.js (V8) 中运行它,并且在 170,000 个 id 后仍然没有碰撞。 编辑:240,000。

关于javascript - javascript 生成的 uuid 有多独特和随机?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23164474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com