Php 使用chr+;随机生成一个随机字符(a-Z)

Php 使用chr+;随机生成一个随机字符(a-Z),php,Php,我使用下面的代码从a-Z生成一个随机字符,但它偶尔会生成@符号。你知道怎么预防吗?可能字符范围不正确 $letter = chr(64+rand(0,26)); ASCII码64是@。你想从65岁开始,这是A。此外,PHP的rand生成一个从min到max的数字:您应该将其设置为25,这样您得到的最大字符是90(Z) 您可以使用,因为您可以从a-Z生成: $range = array_merge(range('A', 'Z'),range('a', 'z')); $index = array_

我使用下面的代码从a-Z生成一个随机字符,但它偶尔会生成@符号。你知道怎么预防吗?可能字符范围不正确

$letter = chr(64+rand(0,26));

ASCII码64是
@
。你想从65岁开始,这是
A
。此外,PHP的
rand
生成一个从
min
max
的数字:您应该将其设置为25,这样您得到的最大字符是90(
Z


您可以使用,因为您可以从a-Z生成:

$range = array_merge(range('A', 'Z'),range('a', 'z'));
$index = array_rand($range, 1);
echo $range[$index];
用这个更容易

大写

$letter = chr(rand(65,90));
$letter = chr(rand(97,122));
小写

$letter = chr(rand(65,90));
$letter = chr(rand(97,122));

下面的代码生成一个长度为$length的随机字母数字字符串。你可以在那里看到你需要的数字

function izrand($length = 32) {

                $random_string="";
                while(strlen($random_string)<$length && $length > 0) {
                        $randnum = mt_rand(0,61);
                        $random_string .= ($randnum < 10) ?
                                chr($randnum+48) : ($randnum < 36 ? 
                                        chr($randnum+55) : $randnum+61);
                 }
                return $random_string;
}

下面的代码将生成一个由2个字母和3个数字组成的字母数字字符串

$string = strtoupper(chr(rand(65, 90)) . chr(rand(65, 90)) . rand(100, 999));
echo $string;

为什么不干脆‘chr(rand(65,90));’?与其
range()
,为什么不
str\u split()
<代码>回声阵列(str_split('ABCDEFGHIJKLMNOP'),1)选择器的最后部分出现错误:
($randnum<36?chr($randnum+55):$randnum+61)
。。。应该是
($randnum<36?chr($randnum+55):chr($randnum+61))
…由于PHP7,应该使用
random_int
(加密RNG),而不是
rand
mt_rand
。要组合多个范围,您可以这样做:
$a=[$randouperscape,$randowercase,$randowercase,$randDigit]
然后从数组中获取一个随机值:
$randAlphaNum=$a[random_int(0,count($a)-1)]
事实上,这仅仅是因为基偏移量(
64
)太低了
1
,然后添加的整数范围太高了,因为基已更改。如果您想避免此类容易发生的错误,只需使用以下命令。
$string = strtoupper(chr(rand(65, 90)) . chr(rand(65, 90)) . rand(100, 999));
echo $string;