php中的随机数生成器

时间:2010-09-04 11:14:51

标签: 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>";
}

但是在10位数之后,php会生成科学记数,例如 1.0E + 19 ,并且生成的随机数是一团糟。

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

我能做些什么呢?有什么帮助吗?

感谢。

4 个答案:

答案 0 :(得分: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";
}

答案 1 :(得分:8)

您可以使用BC Math Functions来克服限制。或者,如果您不打算使用随机数进行计算,则可以创建一个随机的20位数字符串。类似的东西:

$num = '';
for ($i = 0; $i < 20; $i++)
   $num .= mt_rand(0, 9);
echo $num;

答案 2 :(得分:0)

  1. 在windows平台上,可以使用getrandmax(),它只提供32768。
  2. 所以你需要的范围大于32768。
  3. 指定最小和最大
  4. 允许您创建大于32768的范围
  5. 所以它会考虑使用mt_rand()而不是getrandmax()
  6. 例如,

    <?php
    echo rand() . "\n";
    echo rand() . "\n";
    
    echo rand(5, 15);
    ?>
    

答案 3 :(得分:0)

我建立在“明星”的反应之上。我想要25行,25个随机生成的数字:

<?php
  $num = '';
  while($i < 25)
  {
    for ($n = 0; $n < 25; $n++)
      $num .= mt_rand(0, 9);
      echo $num . "</br>";
  $num = '';
  $i++;
  }
?>