【问题标题】:PHP generating random numbersPHP生成随机数
【发布时间】:2012-05-10 04:16:27
【问题描述】:

我需要在我的脚本中生成大约 5,000 个随机数,但是 CPU 太快了,以至于我看到了随机数的趋势。

例如,在 100 次第一次迭代中,我使用 rand(0,100); 得到了 80 个介于 70 和 99 之间的值,这确实很不方便。

有没有办法解决这个问题,或者说随机性在 2012 年不再实现?

我相信有可能从执行随机数次的函数中生成随机数……但我想不出一个。

【问题讨论】:

  • 你用随机数做什么?他们的目的可能会导致答案朝着正确的方向发展
  • @Jack 我用随机数根据复概率确定方法。
  • 好的,那么mt_rand()“可能”足够好;-)
  • Better Random Generating PHP 的可能重复项

标签: php


【解决方案1】:

你在使用rand()吗?考虑“generating a better random value”。

附录;看到硬币的two sides 总是很高兴。

【讨论】:

  • 我正在使用 rand()。 mt_rand 生成速度快 4 倍,因此它应该有所帮助。谢谢
【解决方案2】:

rand 是由时间播种的。 mt_rand 可能更适合您。如果您想要更好的随机性,可以使用openssl_random_pseudo_bytes(如果可用)或/dev/[u]random(如果您无权访问它并且在可用的系统上)。如果你使用这些,你必须用hexdec(bin2hex()) 转换字节以获得十进制数字,然后可能会截断它们。

【讨论】:

    【解决方案3】:

    mt_rand() 是对 rand() 的改进。但是,随机数是从序列中生成的,所以...

    【讨论】:

      【解决方案4】:

      使用这个功能:

      function Random($length = 210) {
      $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
      $randomString = '';
      for ($i = 0; $i < $length; $i++) {
          $randomString .= $characters[rand(0, strlen($characters) - 1)];
      }
      return $randomString;
      }
      

      您可以将 210 更改为您想要的任何数字,希望这会有所帮助

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-18
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 2013-03-25
      • 2016-10-07
      • 2013-01-09
      • 1970-01-01
      相关资源
      最近更新 更多