【问题标题】:PHP Random NumberPHP 随机数
【发布时间】:2011-03-09 14:06:46
【问题描述】:

我想在 PHP 中生成一个随机数,其中数字本身不应在该数字中重复。 那可能吗? 您可以在此处粘贴示例代码吗? 例如:674930、145289。[即不应出现相同的数字] 谢谢

【问题讨论】:

  • 如果你这样做,数字不会是随机的,因为你会干扰进程。

标签: php random numbers


【解决方案1】:
<?php
function genRandomString() {
$length = 10;  // set length of string
$characters = '0123456789';  // for undefined string
$string ="";
for ($p = 0; $p < $length; $p++) {
$string .= $characters[mt_rand(0, strlen($characters))];
}
return $string;
}

 $s = genRandomString(); //this is your random print var 


or


function rand_string( $length )
{
$chars = "0123456789";
$size = strlen( $chars );
for( $i = 0; $i < $length; $i++ )
{
$str .= $chars[ rand( 0, $size – 1 ) ];
}
return $str;
}
$rid= rand_string( 6 ); // 6 means length of generate string


?>

【讨论】:

    【解决方案2】:

    我看到的类似这样的最少代码是:

    function random_num($n=5)
    {
        return rand(0, pow(10, $n));
    }
    

    但我假设它需要比其他方法更多的处理。

    【讨论】:

      【解决方案3】:
      function randomize($len = false)
      {
         $ints = array();
         $len = $len ? $len : rand(2,9);
         if($len > 9)
         {
            trigger_error('Maximum length should not exceed 9');
            return 0;
         }
         while(true)
         {
            $current = rand(0,9);
            if(!in_array($current,$ints))
            {
               $ints[] = $current;
            }
            if(count($ints) == $len)
            {
                return implode($ints);
            }
         }
      }
      echo randomize(); //Numbers that are all unique with a random length.
      echo randomize(7); //Numbers that are all unique with a length of 7
      

      应该这样做

      【讨论】:

        【解决方案4】:
        $result= "";
        $numbers= "0123456789";
        $length = 8;
        
        $i = 0; 
        
        while ($i < $length) 
        { 
            $char = substr($numbers, mt_rand(0, strlen($numbers)-1), 1);
            //prevents duplicates
            if (!strstr($result, $char)) 
            { 
                $result .= $char;
                $i++;
            }
        }
        

        这应该可以解决问题。在 $numbers 中你可以放任何你想要的字符,例如:我用它来生成随机密码、产品代码等。

        【讨论】:

          【解决方案5】:

          这是一个很好的方法:

          $amountOfDigits = 6;
          $numbers = range(0,9);
          shuffle($numbers);
          
          for($i = 0;$i < $amountOfDigits;$i++)
             $digits .= $numbers[$i];
          
          echo $digits; //prints 217356
          

          如果你想要一个简洁的函数,你可以创建这样的东西:

          function randomDigits($length){
              $numbers = range(0,9);
              shuffle($numbers);
              for($i = 0;$i < $length;$i++)
                 $digits .= $numbers[$i];
              return $digits;
          }
          

          【讨论】:

          • 我什至会这样做:echo intval(implode('', array_splice($numbers, $amountOfDigits)));
          猜你喜欢
          • 2016-04-01
          • 2012-01-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多