mt_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。有没有办法增加最大数量或更好的方法来做到这一点?谢谢

要运行 php 7 中的代码,您必须进行类型转换

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

在32位和64位系统上,数字99999999999999999999太大,无法用PHP7中的整数表示,所以变成了浮点数。

但是,mt_rand() 需要两个整数。因为 99999999999999999999 太大而不是整数,当你将它传递给函数时,PHP 7 throws an error, because it cannot be safely converted。您没有收到 999999999 的此错误,因为它小到足以成为一个整数。

无论如何,在 PHP 5 下,您当前的代码可能没有按照您的意愿执行:99999999999999999999 在 64 位系统上被静默转换为 7766279631452241920,以及其他一些东西在 32 位系统上。所以你没有得到全部的随机数。你写了 rand(0, 99999999999999999999),但你实际上得到了 rand(0, 7766279631452241920)

如果您只想要一个尽可能广泛的随机数,试试这个:

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

PHP_INT_MAX 是一个包含最大可能整数的常量(根据您使用的是 32 位还是 64 位,它会有所不同)。因此,这样做将始终为您提供该函数中尽可能广泛的随机正数。

微时间每次随机生成。

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

    return $microtimeInt;
}