Geddy的Node.js:geddy.string.uuid(x)确保string是唯一的吗?

我正在关注使用Node.js和Geddy制作简单应用程序的教程。 对于每个新的条目,它设置条目id geddy.string.uuid(10) ,似乎并没有运行任何其他检查。 我担心的是,当创build一个新条目时,它可能会产生与之前条目相同的ID,如果该ID已经存在,本教程中的保存脚本将覆盖/更新条目。

我知道如果可能会发生这种情况是很less见的,但是如果可能的话,我认为没有责任让这个机会离开。 我知道在PHP中,我会运行一些检查,以确保它是独一无二的,只是想知道是否Geddy已经这样做了,对我来说,教程似乎不担心呢?

谢谢。

没有真正的机会发生两次uuid。

从技术上讲,在340,282,366,920,938,463,463,374,607,431,768,211,456(16到32次方)中有一个会有一个副本。 Geddy的uuid函数(像其他大多数函数一样)使用32位hex数字(128位)的随机位。 请参阅http://en.wikipedia.org/wiki/Universally_unique_identifier#Random_UUID_probability_of_duplicates 。 基本上,你不会得到一个副本。

作为一个方面说明,有趣的是,你在这里传递10个uuid: geddy.string.uuid(10) 。 在最新版本的getty string.js中 ,uuid没有参数,所以10将被忽略。

 148 this.uuid = function () { 149 var chars = _UUID_CHARS, uuid = [], rnd=0, r; 150 for (var i = 0; i < 36; i++) { 151 if (i==8 || i==13 || i==18 || i==23) { 152 uuid[i] = '-'; 153 } else { 154 if (rnd <= 0x02) rnd = 0x2000000 + (Math.random()*0x1000000)|0; 155 r = rnd & 0xf; 156 rnd = rnd >> 4; 157 uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r]; 158 } 159 } 160 return uuid.join(''); 161 }; 

如果您的geddy版本中的10个数字将hex数字限制为10,那么在1,099,511,627,776(1万亿)的碰撞几率中只有1个。 这仍然是不太可能的,虽然它可能是野蛮人被迫find重复的ID。