【问题标题】:Random number seeded with custom time使用自定义时间播种的随机数
【发布时间】:2013-09-09 11:02:43
【问题描述】:

我正在尝试使用 javascript 创建如下所示的随机数

function valid(form) {
  var input = 0;
  var input = document.getElementById('custom1').value;
  var final_input = input.charAt(0);
  var number = 1000000000 - Math.floor(Math.random() * 1000000000);
  final_input = final_input + number;
  document.getElementById('custom4').value = final_input;
}

这个想法是它将从“custom1”(这是输入字段之一)中获取值,然后将获取第一个字符。之后,它将添加接下来的 9 个随机数字并将最终值放入表单的 custom4(另一个输入字段)。到目前为止,javascript 工作正常。但是,我宁愿让随机数字以 当前时间 为种子。我认为这将是非常随机的。这可能吗?

【问题讨论】:

  • 您需要编写自己的 PRNG。 JavaScript 的本机无法播种。

标签: javascript random


【解决方案1】:

JavaScript standard random API 不支持显式播种(很遗憾)。这是the spec

返回一个大于等于 0 的正号数值 但小于 1,随机或伪随机选择,大约 在该范围内均匀分布,使用 依赖于实现的算法或策略。这个函数不需要 论据。

如果你真的需要给你的生成器播种一个给定的数字,你必须使用像 this one 这样的库(未经我测试)。

但 JavaScript 随机 API 是隐式播种的,可确保您得到不同的结果。没有关于如何播种的 ECMAScript 规范,但很可能所有浏览器都使用时间进行播种。 MDN 说

随机数生成器是从当前时间播种的,如 Java。

【讨论】:

    【解决方案2】:

    我必须纠正自己。这仅适用于 Mozilla(据我所知):JavaScript 随机 API 已经使用当前时间作为种子。不需要加倍(而且不支持)。

    规范没有提及如何生成随机数以及是否以及如何播种的算法或策略。

    【讨论】:

    • 所以基本上每次我运行这个,我都会得到不同的数字。我对么?有没有可能这两个数字最终会相同?
    • 是的,这就是你所说的“随机”。你不知道接下来会出现哪个数字。它可以是相同的或任何其他的。机会都是平等的。
    • 嗯,那我想我走错了方向。我需要唯一的随机数:(怎么做?基本上我需要生成的数字是真正唯一的。
    • 那么你应该考虑使用UUID之类的东西。
    【解决方案3】:

    谢谢.. 最后我有类似下面的东西

    function valid(form) {
      var input = 0;
      var input = document.getElementById('custom1').value;
      var final_input = input.charAt(0);
      var number = new Date().valueOf(); /*1000000000 - Math.floor(Math.random() * 1000000000);*/
      final_input = final_input + number;
      document.getElementById('custom4').value = final_input;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-02
      • 2014-03-24
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      相关资源
      最近更新 更多