在Javascript中生成真正随机的数字

时间:2017-03-23 03:39:08

标签: javascript jquery random

是否可以在JavaScript中创建真正的随机数?

我在这里试过jsfiddle

使用Javascript:

    // Mouse coordinates on click
var mouseX;
var mouseY;
$(document).ready(function(){

  $("#btn1").click(function(e){
    mouseX = e.clientX;
    mouseY = e.clientY;
  });

});


// Timing mouse down
var pressed;
var duration;

$(document).ready(function(){

  $("#btn1").on("mousedown", function(){
    pressed = +new Date();
  });
  $("#btn1").on("mouseup", function(){
    duration = +new Date() - pressed;
  });

});

// Time since last click
var loaded;
var onPush;
$(document).ready(function(){

  loaded = +new Date();
  $("#btn1").on("mousedown", function(){
    onPush = +new Date() - loaded;
    loaded = +new Date();
  });

});

// Extending process for pseudorandom number? or creating a truly random number?
$(document).ready(function(){
  $("#btn1").on("click", function(){

    function rnum(min, max) {
      var a = Math.random();
      var ranMouseX = mouseX * a;
      var ranMouseY = mouseY * a;
      var ranDuration = duration * a;
      var ranOnPush = onPush * a;

      var combine = ((ranMouseX / ranOnPush) + (ranMouseY / ranDuration) % a);
      $("#p1").text(((combine - Math.floor(combine)) * (max-min) + min).toFixed(0))
    };
    var f = document.getElementById('min');
    var g = document.getElementById('max');
    rnum(parseInt(f.value), parseInt(g.value));
  });
});

但我刚刚扩展了伪随机数的过程吗?或者这是一个真正的随机数?

如果它仍然只是一个伪随机数,我如何在JavaScript中创建一个真正的随机数?

3 个答案:

答案 0 :(得分:1)

从默认API中,你会遇到伪随机(真正随机的需要物理接口)。

但是,Crypto接口确实提供了加密安全随机数生成器:Crypto.getRandomValues()哪些种子具有比默认Math.random()方法更多的熵。< / p>

var array = new Uint32Array(10);
window.crypto.getRandomValues(array);

for (var i = 0; i < array.length; i++) {
    console.log(array[i]);
}

答案 1 :(得分:0)

您只是通过使用和组合非随机坐标点和时间值,从Math.random()扩展伪随机数的生成。您可以明确地测量鼠标单击的持续时间和光标的坐标点,因为您可以导出这些值,因此没有任何关于此生成的随机性。

如果你想要更接近真正随机的东西,那么考虑使用random.org API来获得真正随机的数字,尽管我建议只使用它来播种,而不是每个数字,因为你需要遵守它们的使用限制

答案 2 :(得分:0)

您可以使用API​​ - ANU Quantum Random Number Generator API。从描述:

  

这些数字被认为是“真正随机的”,因为它们是通过测量真空的量子波动而产生的