mt_rand和rand不起作用(PHP)


mt_rand and rand not working (PHP)

我遇到了一个问题,当我尝试用mt_rand或rand(在更大的范围内)随机生成数字时,我根本没有得到任何结果。这曾经在我的服务器上运行良好,但现在似乎出现了问题,我不确定为什么。

<?php
echo 'Your number is: '.rand(0, 99999999999999999999);
?>

在哪里,我将其更新为类似(使用9位数字):

<?php
echo 'Your number is: '.rand(0, 999999999);
?>

下面的例子会很好用。我最近更改了我的服务器版本PHP 7.0。有没有办法增加最大数量或更好的方法?谢谢

在32位和64位系统上,数字99999999999999999999太大,无法在PHP7中表示为整数,因此它变为浮点值。

但是,mt_rand()取两个整数。因为99999999999999999999太大,不能是整数,所以当您将其传递给函数时,PHP7会抛出一个错误,因为它无法安全地转换。999999999没有出现此错误,因为它足够小,可以是一个整数。

无论如何,您当前的代码在PHP5下可能没有达到您想要的效果:在64位系统上,99999999999999999999被静默地转换为7766279631452241920,在32位系统上则被转换为其他代码。所以你没有得到所有的随机数。你写了rand(0, 99999999999999999999),但实际上你得到了rand(0, 7766279631452241920)

如果你只想要一个尽可能宽的随机数,试试这个:

<?php
echo 'Your number is: '.rand(0, PHP_INT_MAX);
?>

PHP_INT_MAX是一个包含最大可能整数的常数(根据您使用的是32位还是64位,整数会有所不同)。因此,这样做总是会从该函数中得到尽可能广泛的随机正数。

要在php7中运行代码,必须键入

<?php
echo 'Your number is: '.rand(0,(int) 99999999999999999999);
?>

Microtime每次都随机生成。

function microtimeRand( $min, $max ) {
    $microtimeInt = intval( microtime( true ) * 100 );
    $microtimeInt = $microtimeInt % ($max - $min);
    $microtimeInt += $min;
    return $microtimeInt;
}