我在这里找到了问题:
Create GUID / UUID in JavaScript?
答案提供以下JS:
function S4() {
return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
}
function guid() {
return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}
现在,其中一些对我来说似乎很愚蠢。为什么这么重复?我打算用它来命名上传到我的服务器的文件,这样它们就不会互相覆盖。这似乎不会始终生成唯一的数字。
上述代码比命名文件math.random()
有什么好处。它甚至没有改变种子。
对不起,我从来没有使用过GUID / UUID,有些代码对我来说没有任何意义......
澄清
很多人都不像我问的那样回答这个问题。很多人都在解释GUID并不总是独一无二的,等等等等。那不是我要问的。我问,在math.random()
上使用它有什么意义。
Joe似乎在评论中给了我最好的答案。
答案 0 :(得分:2)
举个例子,即使.NET GUID也没有“绑定”到一台机器上。 .NET使用v4 UUID表示Guid.NewGuid()
(Simple proof that GUID is not unique),因此122位随机性加6个固定位。通过在这里阅读Are GUID collisions possible?,似乎SQL Server使用了一个完整的随机数(但我没有SQL Server来检查...已检查......它似乎使用相同格式的v4。有一个“固定的“4”和下一个“块”始终以8,9,A,B开头。所以122位随机性。)
那么这个随机生成器有什么问题,以“知道”格式提供128位随机性?您是否希望看到非固定格式的128位数?哇!非常实用......这里......取一个43438471087229589138546501885363994076
(它是转换为数字值的GUID,基数为10)。现在,您想如何保存它最喜欢的数据库? VARCHAR
或NUMERIC
?将它打包到GUID中是不是更容易?
作为旁注......与math.random()
相比有什么优势?嗯......单次使用math.random()
就很清楚:-)我不知道math.random
的单个调用有多少随机性,但最多只有63位(一个数字)在JS中是64位,但1位用于符号)。可能还有很多。
答案 1 :(得分:1)
即使这个答案也说:“你想要实际的GUID,还是看起来像GUID的随机数?”因为那些不是真正的GUID。同样来自原始主题:“没有办法在Javascript中生成真正的GUID,因为它们依赖于浏览器不公开的本地计算机的属性。”所以我的问题是:你需要一个GUID吗?或者只是一个随机文件名? GUID作为消费者并不神奇,它不是它的外观,它是如何生成的。对于随机文件名,使用时钟滴答+随机数将(至少为)有效...
在你的情况下,没有理由。但是如果你的JS代码与那些期望GUID或者那种形式的东西交谈,那么你需要传递类似格式的东西,因为你无法在纯JS中生成真实的东西。