我需要在我的脚本中生成大约 5,000 个随机数,但是 CPU 太快了,以至于我看到了随机数的趋势。
例如,在 100 次第一次迭代中,我使用 rand(0,100); 得到了 70 到 99 之间的 80 个值,这可能会带来真正的不便。
有没有办法解决这个问题,或者随机性在 2012 年不再实现?
我相信有可能从执行随机次数的函数中生成随机数......但我想不出一个。
我需要在我的脚本中生成大约 5,000 个随机数,但是 CPU 太快了,以至于我看到了随机数的趋势。
例如,在 100 次第一次迭代中,我使用 rand(0,100); 得到了 70 到 99 之间的 80 个值,这可能会带来真正的不便。
有没有办法解决这个问题,或者随机性在 2012 年不再实现?
我相信有可能从执行随机次数的函数中生成随机数......但我想不出一个。
rand
是由时间播种的。 mt_rand
可能对你更好。如果您想要更好的随机性,您可以使用openssl_random_pseudo_bytes
(如果可用),或者/dev/[u]random
如果您无权访问它并且在可用的系统上。如果使用这些,则必须将字节转换为hexdec(bin2hex())
十进制数字,然后可能会截断它们。
mt_rand() 是对 rand() 的改进。但是,随机数是从序列中生成的,所以...
使用此功能:
function Random($length = 210) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
您可以将 210 更改为您想要的任何数字,希望这会有所帮助