【问题标题】:Php - Random string with fixed regexpPhp - 具有固定正则表达式的随机字符串
【发布时间】:2016-03-07 23:06:43
【问题描述】:

关于这个:

Generating a unique random string of a certain length and restrictions in PHP?

我希望它进化:

function getRandomString($length = 8) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $string = '';

    for ($i = 0; $i < $length; $i++) {
        $string .= $characters[mt_rand(0, strlen($characters) - 1)];
    }

    return $string;
}

如何随机生成 8 个字符但只有 5 个数字?

谢谢。

【问题讨论】:

    标签: php generated-code


    【解决方案1】:

    函数 getRandomString($length = 8) { $characters = str_split('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789');

    for ($i = 0; $i < $length; $i++) {
        $rand = '';
        foreach (array_rand($characters, 5) as $k) $rand .= $characters[$k];
        $string[$i] = $rand;
    }
    
    return $string;
    

    }

    http://ideone.com/SSg3m4

    【讨论】:

      【解决方案2】:

      你修改的函数:

      function getRandomString( $length = 8 ) 
      {
          $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
          $digits     = '0123456789';
          $string     = '';
      
          for( $i = 0; $i < 5; $i++ )
          {
              $string .= $digits[ mt_rand( 0, strlen( $digits ) - 1 ) ];
          }
      
          for( $i = 5; $i < $length; $i++ ) 
          {
              $string .= $characters[ mt_rand( 0, strlen( $characters ) - 1 ) ];
          }
      
          $array = str_split( $string );
          shuffle( $array );
          return implode( '', $array );
      }
      

      eval.in demo

      从您的函数开始,我们将$characters 分为$characters$digits,然后我们将5 个随机数字和剩余的随机字符添加到空字符串中。

      最后,我们将结果字符串打乱并返回。

      变体(不重复字符):

      function getRandomString( $length = 8 )
      {
          $characters = str_split( 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' );
          $digits     = str_split( '0123456789' );
      
          shuffle( $characters );
          shuffle( $digits );
      
          $retval = array_merge
          (
              array_slice( $digits, 0, 5 ), 
              array_slice( $characters, 0, $length-5 )
          );
      
          shuffle( $retval );
      
          return implode( '', $retval );
      }
      

      我们直接从数组开始:$characters$digits,然后我们将它们打乱,我们提取 5 个数字项和剩余的字符项,将它们合并到 $retval 数组中。

      最后,我们打乱$retval 数组并将其作为字符串内爆返回。


      编辑:先前版本 3 位 / 5 个字符;实际版本:5位数字/3个字符

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-06
        • 2013-03-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多