我正在尝试使用 mt_rand() 创建一个函数以生成真正的随机数,因为 rand() 还不够。
问题是我需要预先定义数字的长度,比如说我需要一个 10 位的随机数。
无论如何,我一直在胡闹,这就是我想出的:
function randomNumber($length) {
$min = str_repeat(0, $length-1) . 1;
$max = str_repeat(9, $length);
return mt_rand($min, $max);
}
理论上应该可行(据我所知),但事实并非如此。长度是完全随机的,它也会抛出负值。
有什么想法吗?
最佳答案
除非您拥有那些量子静态的东西之一,否则您无法获得真正的随机数。然而,在基于 Unix 的操作系统上,/dev/urandom
用于“更多随机性”,如果您确实需要的话。
无论如何,如果您想要一个 n 位数字,那正是您应该得到的:n 个单独的数字。
function randomNumber($length) {
$result = '';
for($i = 0; $i < $length; $i++) {
$result .= mt_rand(0, 9);
}
return $result;
}
您现有代码无法正常工作的原因是 0000...01
仍然是 1
到 mt_rand
,而且 mt_rand
的范围不是无限的。负数是整数溢出。
关于php - 生成具有预定义长度的随机数 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13169025/