当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《生成(伪)随机字母数字字符串》经验,为你挑选了4个好方法。

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



1> Jeremy Ruten..:

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

 $characters = 'abcdefghijklmnopqrstuvwxyz0123456789';

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

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

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

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


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

2> azerafati..:

我喜欢这项工作的功能

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);



3> emix..:

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

echo bin2hex(openssl_random_pseudo_bytes(4));

程序方式:

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

更新:

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

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



4> Marco Panich..:

一线解决方案:

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

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

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有