使用自定义时间设定的随机数

Random number seeded with custom time

本文关键字:随机数 时间 自定义      更新时间:2023-09-26

我正在尝试使用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工作正常。但是,我宁愿让随机数字与当前时间一起播种。我认为这将是非常随机的。这可能吗?

JavaScript 标准随机 API 不支持显式种子(这是一种耻辱)。这是规格:

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

如果你真的需要用给定的数字来种子你的生成器,你将不得不使用像这样的库(未经我测试)。

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

随机数生成器从当前时间开始设定种子,如 爪哇岛。

我必须纠正自己。这只对Mozilla是正确的(据我所知):JavaScript随机API已经使用当前时间作为种子。无需双重操作(并且不受支持)。

该规范没有提到算法或策略如何生成随机数以及是否以及如何设定

谢谢。最后我有下面这样的东西

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;
}