Javascript 是什么使这个伪GUID生成器比math.random()更好?

Javascript 是什么使这个伪GUID生成器比math.random()更好?,javascript,guid,uuid,Javascript,Guid,Uuid,我在这里发现了一个问题: 答案如下: function S4() { return (((1+Math.random())*0x10000)|0).toString(16).substring(1); } function guid() { return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4()); } 现在,我觉得有些事情很愚蠢。为什么重复这么多?我计划用它来命名上传到我的服务器上的文件,这样它们就不会相

我在这里发现了一个问题:

答案如下:

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在评论中似乎给了我最好的答案。

举个例子,即使是.NET GUID也没有“绑定”到机器上。NET用于
Guid.NewGuid()
(),因此122位随机性加上6个固定位。通过阅读这里,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()就很清楚了:-)我不知道一次调用
math.random
有多少个随机位,但最多是63位(JS中的数字是64位,但1位代表符号)。甚至这个答案都会说:“你想要的是真实的guid,还是看起来像guid的随机数?”因为它们不是真实的guid。同样来自原始线程:“没有办法在Javascript中生成真实的GUID,因为它们依赖于浏览器不公开的本地计算机的属性。”所以我的问题是:您需要GUID吗?或者只是一个随机文件名?作为消费者,GUID并没有什么神奇之处,它不是它的外观,而是它的生成方式。对于随机文件名,使用时钟信号+随机数将(至少)有效


对你来说,没有理由。但是,如果您的JS代码正在与需要GUID或那种格式的东西进行通信,那么您需要传递类似格式的东西,因为您无法在纯JS中生成真实的东西

甚至这个答案也会说:“你想要的是真实的guid,还是看起来像guid的随机数?”因为它们不是真实的guid。同样来自原始线程:“没有办法在Javascript中生成真实的GUID,因为它们依赖于浏览器不公开的本地计算机的属性。”所以我的问题是:您需要GUID吗?或者只是一个随机文件名?作为消费者,GUID并没有什么神奇之处,它不是它的外观,而是它的生成方式。对于一个随机文件名,使用时钟信号+随机数将是(至少同样)有效的…有人想要一个看起来像GUID的东西,但更容易得到。为什么人们要买假劳力士?不能保证GUID是唯一的。GUID是半唯一的。即使考虑到GUID格式不好,也只有2^128个可能的GUID。多亏了生日悖论,如果你生成了其中的2^64个,你就有50%的几率生成一个副本。@xanatos:没错,尽管2^64是十八个五分之一,而且变化…@Joe仍然不是“唯一的”。您无法在单个“未选中”GUID上“同步”整个世界。最后,GUID不是全局唯一的ID。有关UUID:s的其他信息,请访问维基百科: