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

时间:2020-03-05 18:48:53  来源:igfitidea点击:

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

解决方案

回答

首先用所有可能的字符组成一个字符串:

$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是随机字符串的长度。

回答

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

我发现,与所描述的方法(在另一个字符串中专门定义字符范围)相比,该方法更好。

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

看更多:

  • chr功能
  • mt_rand函数

回答

我们可以使用从本文复制而来的以下代码。除了可以强制特殊字符计数外,它与现有功能相似:

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

回答

杰里米的答案很好。如果像我一样不确定如何实现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的功能完全相同,但是在使用字符串的地方使用了合并数组,在使用strlen()的地方使用了count()。

回答

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