生成(伪)随机字母数字字符串

Unk*_*ech 82 php random

如何生成一个(伪)随机字母数字字符串,如:PHP中的'd79jd8c'?

Jer*_*ten 163

首先创建一个包含所有可能字符的字符串:

 $characters = 'abcdefghijklmnopqrstuvwxyz0123456789';
Run Code Online (Sandbox Code Playgroud)

您还可以使用range()更快地完成此操作.

然后,在循环中,选择一个随机数并将其用作$characters字符串的索引以获取随机字符,并将其附加到您的字符串:

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

$random_string_length 是随机字符串的长度.

  • 每次迭代执行`strlen()`都不好.将`strlen($ characters) - 1`分配给变量并执行strlen out of循环.在这种情况下并不重要,但它只是[Mauvais ton](http://www.websters-online-dictionary.org/definitions/Mauvais+Ton). (11认同)
  • 我也使用这种技术并删除所有的元音,所以我不小心给某人一些粗鲁的密码. (10认同)
  • 小改进:[`mt_rand()`](http://php.net/mt_rand)是`rand()`的替代品,并且更好. (10认同)
  • 如果您希望删除看起来相同的字符,例如"l"和"1","O"和"0",则此实现也很好.在为用户生成新密码时,这是值得的. (9认同)
  • 如果您需要加密安全随机,请考虑使用[random_int](http://php.net/manual/en/function.random-int.php). (6认同)

aze*_*ati 18

我喜欢这项工作的功能

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);
Run Code Online (Sandbox Code Playgroud)


emi*_*mix 13

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

echo bin2hex(openssl_random_pseudo_bytes(4));
Run Code Online (Sandbox Code Playgroud)

程序方式:

function randomString(int $length): string
{
    return bin2hex(openssl_random_pseudo_bytes($length));
}
Run Code Online (Sandbox Code Playgroud)

更新:

PHP7引入了random_x()应该更好的功能.如果您来自PHP 5.X,请使用优秀的paragonie/random_compat库,它是来自PHP 7的random_bytes()random_int()的polyfill.

function randomString($length)
{
    return bin2hex(random_bytes($length));
}
Run Code Online (Sandbox Code Playgroud)


Mar*_*chi 6

一线解决方案:

echo substr( str_shuffle( str_repeat( 'abcdefghijklmnopqrstuvwxyz0123456789', 10 ) ), 0, 7 );
Run Code Online (Sandbox Code Playgroud)

您可以更改substr参数,以便为字符串设置不同的长度.