0

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

4

3 回答 3

2

JavaScript标准随机 API不支持显式播种(很遗憾)。这是规格

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

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

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

随机数生成器是从当前时间播种的,就像在 Java 中一样。

于 2013-09-09T11:04:39.690 回答
1

I must correct myself. This is only correct for Mozilla (as far as i know): The JavaScript random API uses already the current time as a seed. No need to do it double (and it's not supported).

The specification doesn't mention a algorithm or strategies how the random number is generated and if and how it is seeded.

于 2013-09-09T11:08:08.600 回答
0

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

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;
}
于 2013-09-09T11:41:29.310 回答