我正在尝试使用 mt_rand() 创建一个函数来生成真正的随机数,因为 rand() 还不够。
问题是我需要预先定义数字的长度,假设我需要一个 10 位随机数。
无论如何,我一直在搞乱,这就是我想出的:
function randomNumber($length) {
$min = str_repeat(0, $length-1) . 1;
$max = str_repeat(9, $length);
return mt_rand($min, $max);
}
理论上这应该有效(据我所知),但事实并非如此。长度是完全随机的,并且它也会抛出负值。
有任何想法吗?
如果“真正的随机数”是指加密安全的随机数,请确保使用random_int https://www.php.net/manual/en/function.random-int.php代替mt_rand
. mt_rand
不基于 CSPRNG。如果您不知道是否需要 CSPRNG,请使用random_int
anyway– 这并不慢。
如果您想要一个 n 位数字字符串,这正是您应该得到的:n 个单独的数字。
function random_digits($length) {
$result = '';
for ($i = 0; $i < $length; $i++) {
$result .= random_int(0, 9);
}
return $result;
}
您现有的代码不起作用的原因是0000...01
还是1
to mt_rand
,还有那个mt_rand
的范围不是无限的。负数是整数溢出。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)