为什么rand()生成一个低数字?

can*_*say 2 php

这是我的代码

<?php

function random_id() {
    $chars = 'abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $id = '';
    for ($i = 0; $i < 5; ++$i)
    {
        $id .= $chars[rand(1, 26)];
    }
    echo $id;
}

random_id();

?>
Run Code Online (Sandbox Code Playgroud)

它不断生成带有5个小写数字的ID,而且偶尔它会有一个数字.我也尝试过mt_rand(),并且在循环之前使用srand(time())srand(microtime())在脚本的开头.

此外,应该rand(1, 26)还是rand(0, 25)

Rud*_*olf 8

您的字符串超过26个字符.改为使用此rand函数:

rand(0, strlen($chars) - 1)
Run Code Online (Sandbox Code Playgroud)

因此,您不是在每次迭代时计算字符串长度,而是保持动态,因此值得考虑将计算移到循环外部,如下所示:

$chars = 'abcdefghijklmnopqrstuvwxyz1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$chars_cnt = strlen($chars) - 1;
for ($i = 0; $i < 5; ++$i)
{
    $id .= $chars[rand(1, $chars_cnt)];
}
Run Code Online (Sandbox Code Playgroud)