是否可以在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中创建一个真正的随机数?
答案 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。从描述:
这些数字被认为是“真正随机的”,因为它们是通过测量真空的量子波动而产生的