php中的随机数生成器

jes*_*est 2 php

我写了一个PHP脚本来生成1到99999999999999999999之间的随机值(即20 9).

脚本是这样的:

$maxq=20;
for($i=1;$i<=$maxq;$i++) {
    $min=pow(10,$i);
    $max=(pow(10,$i)*10)-1;
    echo $min."<br>";
    echo $max."<br>";
    echo mt_rand($min,$max)."<br>----<br>";
}
Run Code Online (Sandbox Code Playgroud)

但是在10位数之后,php会生成像1.0E + 19这样的科学符号,并且生成的随机数是一团糟.

我想是因为我的硬件模仿(操作系统:Win XP 32位).

我能做些什么呢?任何帮助?

谢谢.

str*_*ger 10

您可以生成n个随机数字并将它们连接成一个大字符串.

function randomDigits($numDigits) {
    if ($numDigits <= 0) {
        return '';
    }

    return mt_rand(0, 9) . randomDigits($numDigits - 1);
}

// Or an iterative approach
function randomDigitsLame($numDigits) {
    $digits = '';

    for ($i = 0; $i < $numDigits; ++$i) {
        $digits .= mt_rand(0, 9);
    }

    return $digits;
}

$maxq = 20;

for ($i = 1; $i <= $maxq; $i++) {
    echo $i . "<br>\n";
    echo randomDigits($i) . "<br>\n----<br>\n";
}
Run Code Online (Sandbox Code Playgroud)


bra*_*amp 8

您可以使用BC数学函数来克服限制.或者,如果您不打算使用随机数进行计算,则可以创建一个随机的20位数字符串.就像是:

$num = '';
for ($i = 0; $i < 20; $i++)
   $num .= mt_rand(0, 9);
echo $num;
Run Code Online (Sandbox Code Playgroud)