random_int生成的值小于最小值

use*_*956 -1 php random passwords generator

我正在生成密码random_int,但我注意到一些奇怪的东西.有时(纯粹随机),它会生成小于最小值的密码.例如,我设置1015限制,每一次大约50-70尝试它弹出一个2-3字符长密码.我的脚本有问题吗?重现输出很难,只需刷新脚本直到得到类似的结果.

<?php 

    $r_number = random_int( 10 , 15 );

    function random_str(
        $length,
        $keyspace = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ,./<>?;:"|[]{}-=_+`~!@#$%^&*'
    ) {
        $str = '';
        $max = mb_strlen($keyspace, '8bit') - 1;
        if ($max < 1) {
            throw new Exception('$keyspace must be at least two characters long');
        }
        for ($i = 0; $i < $length; ++$i) {
            $str .= $keyspace[random_int(0, $max)];
        }
        return $str;
    }

    $password = random_str($r_number);

    echo $password;

?>
Run Code Online (Sandbox Code Playgroud)

Nie*_*sol 5

在这里继续前行,但......

如果生成的密码恰好包含<- 这是您的默认设置$keyspace- 并且您正在浏览器中查看结果,那么<它将被视为HTML标记的开头并且不会显示,除非>发生任何事情,否则不会显示任何内容被选中.

这是我能想到的唯一能引起这种情况的事情.尝试echo htmlspecialchars($password);输出它.