生成(伪)随机字母数字字符串
时间: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()函数的一种方法。