生成(伪)随机字母数字string

我怎样才能生成一个(伪)随机字母数字string,如:'d79jd8c'在PHP中?

首先用你所有可能的字符做一个string:

$characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; 

你也可以使用range()来更快地做到这一点。

然后,在一个循环中,select一个随机数,并将其用作$charactersstring的索引以获取一个随机字符,并将其附加到string中:

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

$random_string_length是随机string的长度。

我喜欢这个工作的function

 function randomKey($length) { $pool = array_merge(range(0,9), range('a', 'z'),range('A', 'Z')); for($i=0; $i < $length; $i++) { $key .= $pool[mt_rand(0, count($pool) - 1)]; } return $key; } echo randomKey(20); 

使用openssl_random_pseudo_bytes函数生成密码性强,随机(可能)的8个字符的string:

 echo bin2hex(openssl_random_pseudo_bytes(4)); 

程序方式:

 function randomString($length) { return bin2hex(openssl_random_pseudo_bytes($length)); } 

使用ASCII表来select一个字母范围,其中:$ range_start,$ range_end是ASCII表中十进制列的值。

我发现这个方法比所描述的字符范围在另一个string中被明确定义的方法更好。

 // range is numbers (48) through capital and lower case letters (122) $range_start = 48; $range_end = 122; $random_string = ""; $random_string_length = 10; for ($i = 0; $i < $random_string_length; $i++) { $ascii_no = round( mt_rand( $range_start , $range_end ) ); // generates a number within the range // finds the character represented by $ascii_no and adds it to the random string // study **chr** function for a better understanding $random_string .= chr( $ascii_no ); } echo $random_string; 

查看更多:

  • chrfunction
  • mt_rand函数

我知道这是一个旧post,但我想根据Jeremy Ruten的回答创build一个class级,并在评论中改进build议:

  class RandomString { private static $characters = 'abcdefghijklmnopqrstuvwxyz0123456789'; private static $string; private static $length = 8; //default random string length public static function generate($length = null) { if($length){ self::$length = $length; } $characters_length = strlen(self::$characters) - 1; for ($i = 0; $i < self::$length; $i++) { self::$string .= self::$characters[mt_rand(0, $characters_length)]; } return self::$string; } } 

也许我错过了这里的东西,但是这里有一个使用uniqid()函数的方法 。

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

您可以使用下面的代码,从这篇文章复制。 除了可以强制特殊字符计数之外,它与现有的函数类似:

 function random_string() { // 8 characters: 7 lower-case alphabets and 1 digit $character_set_array = array(); $character_set_array[] = array('count' => 7, 'characters' => 'abcdefghijklmnopqrstuvwxyz'); $character_set_array[] = array('count' => 1, 'characters' => '0123456789'); $temp_array = array(); foreach ($character_set_array as $character_set) { for ($i = 0; $i < $character_set['count']; $i++) { $temp_array[] = $character_set['characters'][rand(0, strlen($character_set['characters']) - 1)]; } } shuffle($temp_array); return implode('', $temp_array); } 

我已经做了以下快速的function,只是为了玩弄range()函数。 它可能在某个时候帮助别人。

 Function pseudostring($length = 50) { // Generate arrays with characters and numbers $lowerAlpha = range('a', 'z'); $upperAlpha = range('A', 'Z'); $numeric = range('0', '9'); // Merge the arrays $workArray = array_merge($numeric, array_merge($lowerAlpha, $upperAlpha)); $returnString = ""; // Add random characters from the created array to a string for ($i = 0; $i < $length; $i++) { $character = $workArray[rand(0, 61)]; $returnString .= $character; } return $returnString; } 

这是我使用的东西:

 $cryptoStrong = true; // can be false $length = 16; // Any length you want $bytes = openssl_random_pseudo_bytes($length, $cryptoStrong); $randomString = bin2hex($bytes); 

您可以在这里看到文档openssl_random_pseudo_bytes,在这里可以看到bin2hex的文档

杰里米的回答很好。 如果像我一样,你不确定如何实现range(),你可以使用range()看到我的版本。

 <?php $character_array = array_merge(range('a', 'z'), range(0, 9)); $string = ""; for($i = 0; $i < 6; $i++) { $string .= $character_array[rand(0, (count($character_array) - 1))]; } echo $string; ?> 

这和Jeremy的完全一样,但是在他使用string的地方使用了合并的数组,并且在他使用strlen()的地方使用了count()。

1行:

 $FROM = 0; $TO = 'zzzz'; $code = base_convert(rand( $FROM ,base_convert( $TO , 36,10)),10,36); echo $code; 

一行解决scheme:

 echo substr( str_shuffle( str_repeat( 'abcdefghijklmnopqrstuvwxyz0123456789', 10 ) ), 0, 7 ); 

您可以更改substr参数为您的string设置不同的长度。