0

我有这个应该生成 4 个字符长度的验证码脚本。它这样做 - 大多数时候。虽然,有时它会生成 3 个字母而不是 4 个。我根本找不到错误。

这是生成长度的脚本:

  $_chars = "0123456789ZXCVBNMASDFGHJKLQWERTYUIOP";

    for($l = 0; $l<4; $l++){


        $temp = str_shuffle($_chars);


        $char = mt_rand(0, strlen($temp));


        $_charcode .= $temp[$char];


    }
4

1 回答 1

3

随机函数的max参数 (second ) 应该比字符串的长度小 1,因为索引从 0 开始,并且稍后在代码中将该索引用于数组。

$char = mt_rand(0, strlen($temp));  // Goes out of bounds on some runs

应该

$char = mt_rand(0, strlen($temp)-1);   // This way you wont get a blank one

这是一个有 500 次运行的小提琴。

小提琴

于 2013-10-04T06:23:14.193 回答