【问题标题】:Javascript: What is best approach to generate unique numeric string? [closed]Javascript:生成唯一数字字符串的最佳方法是什么? [关闭]
【发布时间】:2016-02-21 18:26:08
【问题描述】:

以下选项中最好的方法是什么:

选项 1: var d = new Date(); uniqueString = d.getTime();

选项 2: uniqueString = Math.random();

【问题讨论】:

  • “超出以下选项”:我认为这将是两者的结合。
  • 这些都不会是非常独特的。
  • 请详细说明您对“独特”的定义。您在寻找会话 ID 吗?数据库的主键?可用于关联请求和响应的请求 ID?取决于你想要做什么,要么要么都不行。在真空中,我不会使用上述任何一种。
  • @Nicensin 问题是,它们甚至可能还不够“独特”。如果 Math.random() 返回一个 64 位浮点 double,则在生成 600 万个密钥后,您发生冲突的几率大约为 (wikiwand.com/en/Birthday_attack) 百万分之一。如果密钥的范围是瞬态的,这可能就足够了。如果您要为大型 Web 应用程序存储审核日志,则可能不会。

标签: javascript string unique numeric


【解决方案1】:

通过使用日期(连续的,非随机的),两个不同的实例可能会重合。

与 Math.random() 重叠的几率要低得多(同样可能,但不太可能)。

【讨论】:

  • 时间戳重合的可能性不大。如果您生成两个中间没有任何长时间运行的操作,那么迟早的处理器可能会变得足够快,以使两个连续生成的时间戳相同。
  • 但是 Math.random() 在不同时间使用时有可能返回相同的字符串。
  • 在统计上,重合时间比 Math.random() 更有可能(正如 millimoose 明智地指出的那样,随着处理器速度的提高,这种可能性也更大)。正如 emdevtec 所说,您可以获得更高的小数精度(日期仅为毫秒,然后不是随机的,而是连续的,随机是 16 位小数,所有这些都是随机的)
【解决方案2】:

在这两个中,我会选择第二个选项。

getTime() 会产生 13 位数字,其中大部分在几周内保持不变,random() 会随机化一个大约 16 位数字的数字。

请注意,如果数字只是指数字,那么您将需要多做一些工作才能摆脱随机数字中的 0. 部分。

【讨论】:

  • 是的,我指的只是数字。
猜你喜欢
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 2014-12-05
相关资源
最近更新 更多