gpt4 book ai didi

Javascript:使用 crypto.getRandomValues 生成一个范围内的随机数

转载 作者:可可西里 更新时间:2023-11-01 02:18:11 26 4
gpt4 key购买 nike

我知道您可以使用此函数在一定范围内在 JavaScript 中生成一个随机数:

function getRandomInt (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}

Ionuş G. Stan 提供 here .

我想知道的是,您是否可以使用 crypto.getRandomValues() 在一个范围内生成一个更好 的随机数而不是 Math.random()。我希望能够生成一个介于 0 和 10 之间的数字,包括 0 到 10,或者 0 - 1,甚至 10 - 5000,包括边界值。

您会注意到 Math.random() 生成的数字类似于:0.8565239671015732

getRandomValues API 可能会返回如下内容:

  • 231Uint8Array(1)
  • 54328Uint16Array(1)
  • 355282741Uint32Array(1)

那么如何将其转换回十进制数,以便我可以使用上面相同的范围算法?还是我需要一种新算法?

这是我试过的代码,但效果不是很好。

function getRandomInt(min, max) {       
// Create byte array and fill with 1 random number
var byteArray = new Uint8Array(1);
window.crypto.getRandomValues(byteArray);

// Convert to decimal
var randomNum = '0.' + byteArray[0].toString();

// Get number in range
randomNum = Math.floor(randomNum * (max - min + 1)) + min;

return randomNum;
}

在低端(范围 0 - 1),它返回的 0 多于 1。使用 getRandomValues() 的最佳方法是什么?

非常感谢

最佳答案

恕我直言,描述了使用 window.crypto.getRandomValues()[min..max] 范围内生成随机数的最简单方法 here .

ECMAScript 2015 语法代码,如果链接是 TL;TR:

function getRandomIntInclusive(min, max) {
const randomBuffer = new Uint32Array(1);

window.crypto.getRandomValues(randomBuffer);

let randomNumber = randomBuffer[0] / (0xffffffff + 1);

min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(randomNumber * (max - min + 1)) + min;
}

关于Javascript:使用 crypto.getRandomValues 生成一个范围内的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18230217/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com