我正在搞乱一些代码来使用 PHP 制作一个强大的伪随机数生成器。到目前为止,我有以下内容。
function strongRand($bytes, $min, $max)
{
if(function_exists('openssl_random_pseudo_bytes'))
{
$strong = true;
$n = 0;
do{
$n = hexdec(bin2hex(openssl_random_pseudo_bytes($bytes, $strong)));
}
while($n < $min || $n > $max);
return $n;
}
else{
return mt_rand($min, $max);
}
}
这对我来说几乎是完美的——除了我生成的所有数字openssl_random_pseudo_bytes
都是正数。理想情况下,我想生成从-x 到+y 的数字。我曾考虑过可能添加另一个 PRNG 调用来决定一个数字是正数还是负数,但我不确定这是否是最好的方法。