为什么这段代码有时只生成4个字符串?
function genID()
{
$id = '';
$values = '0123456789abcdefghijklmnopqrstuvwxyz';
for($i=0; $i < 5; $i++) :
$str = substr($values, rand(0, strlen($values)), 1);
if(!is_nan(acos($str)))
(mt_rand(0, 1)) ? $str = strtoupper($str) : '';
$id .= $str;
endfor;
return $id; // e.g: ifR8j
}
答案 0 :(得分:4)
acos($ str)接受的数字不是字符串....如果你从字符串中删除了aphabets
即
$values = '0123456789abcdefghijklmnopqrstuvwxyz';
到
$values = '0123456789';
你的长度为5 ...希望这会有所帮助..
答案 1 :(得分:3)
尝试,简单的事情:
function genID() {
$id = '';
$i = $length = 4;
$possible = "0123456789bcdfghjkmnpqrstvwxyz";
$possibleChar = strlen($possible) - 1;
while ($i) {
$char = $possible[mt_rand(0, $possibleChar)];
while (!strstr($id, $char)) {
$id .= $char;
$i--;
}
}
return $id;
}
答案 2 :(得分:0)
循环迭代5次。
rand
也会返回strlen
,因此$str
有时会""
答案 3 :(得分:0)
(mt_rand(0, 1)) ? $str = strtoupper($str) : '';
满足此条件,因此有时您会得到一个空字符。
修复条件或以其他方式执行循环。 例如
while(strlen($id)<5) {
//do the loop
}
答案 4 :(得分:0)
$str = substr($values, rand(0, strlen($values))-1, 1);
这将始终生成5个字符。