我正在尝试使用 mt_rand() 创建一个函数以生成真正的随机数,因为 rand() 还不够。
问题是我需要预先定义数字的长度,比如我需要一个 10 位随机数。
不管怎样,我一直在胡闹,这就是我想出的:
function randomNumber($length) {
$min = str_repeat(0, $length-1) . 1;
$max = str_repeat(9, $length);
return mt_rand($min, $max);
}
理论上应该可行(据我所知),但事实并非如此。长度是完全随机的,它也会抛出负值。
有任何想法吗?
原文由 Karl 发布,翻译遵循 CC BY-SA 4.0 许可协议
除非你有那些量子静态的东西之一,否则你无法获得真正的随机数。然而,在基于 Unix 的操作系统上,
/dev/urandom
适用于“更多随机性”,如果您确实需要的话。无论如何,如果您想要一个 n 位数字,那正是您应该得到的:n 个单独的数字。
The reason your existing code isn’t working is because
0000...01
is still1
tomt_rand
, and also thatmt_rand
’s range isn ‘无限。负数是整数溢出。