【发布时间】:2012-10-21 13:33:55
【问题描述】:
我正在尝试使用 mt_rand() 创建一个函数以生成真正的随机数,因为 rand() 还不够。
问题是我需要预先定义数字的长度,比如说我需要一个 10 位的随机数。
无论如何,我一直在胡闹,这就是我想出的:
function randomNumber($length) {
$min = str_repeat(0, $length-1) . 1;
$max = str_repeat(9, $length);
return mt_rand($min, $max);
}
理论上应该可行(据我所知),但事实并非如此。长度是完全随机的,也会抛出负值。
有什么想法吗?
【问题讨论】:
-
"为了生成一个真正的随机数" 好吧,你仍然会得到一个伪随机数。即使是 Mersenne twister 也无法为您提供真正的随机数。您可能会得到最接近的来自 random.org 的大气噪声数据。
-
不管怎样,这不是问题,mt_rand() 比 rand() 随机得多。
-
rand(min,max) 将返回一个整数,因此仅在 32 位系统上的 PHP 32 位整数范围内......还要记住 0000000001 == 1,所以你的范围是 1 到 9999999999,你想要 $min = 1 。 str_repeat(0, $length-1)
-
另外,对于 random.org,我不想每次都卷曲他们的网站。
-
@Karl.... 我再重复一遍:“rand(min,max) 将返回一个整数,因此仅在 32 位系统上的 PHP 32 位整数范围内”