for ($i = 1; $i <= $numITER; $i++) {
$val = rand(2,36);
switch (TRUE) {
case ($val<=10):
$vercodeTEMP.=$val;
break;
case ($val>10):
if ($val != 25 && $val != 19) {
$vercodeTEMP.=chr(54+$val);
} else {
$i=$i-1;
}
break;
}
}
我基本上试图避免使用0,1和字母O和I.当兰特范围是2到36时,这怎么可能给我零?
答案 0 :(得分:2)
如果$ val == 10,那么你将$ val附加到$ vercodeTEMP。
尝试:
for ($i = 1; $i <= $numITER; $i++) {
$val = rand(2,36);
if ($val<10) {
$vercodeTEMP.=$val;
} else if ($val != 25 && $val != 19) {
$vercodeTEMP.=chr(54+$val);
} else {
$i=$i-1;
}
}
答案 1 :(得分:2)
我基本上试图避免使用0,1和字母O和I
如果不搞乱魔术数字(除了位置)并使用PHP的range()
呢?
$numbers = range(2, 9);
$letters = range('a', 'z');
unset($letters[8], $letters[14]);
$letters = array_merge($letters, array_map('strtoupper', $letters));
$pool = array_merge($numbers, $letters);
shuffle($pool);
$captcha = join(array_slice($pool, 0, $numITER)); // e.g. 2ESQcnMTNy