Urk! Så mycket kod för så lite...
Felet ligger på denna rad:
$tmp = substr($chars, $num, 1);
Ditt slumpnummer ligger mellan 0 och 9. Säg att numret är 0 då blir substr($chars, $num, 1) == '1', det nollte tecknet i strängen. Säg att numret är 8, då blir substr($chars, $num, 1) == '9', det åttonde tecknet. Säg sedan att slumpnumret är 9, då finns det inget motsvarande tecken i strängen, eftersom räkningen börjar på 0 och slutar på 8. Detta fel kan inträffa flera gånger i rad, och din sträng kan bli ännu kortare, även om sannolikheten är liten.
Detta är min rekommendation.
function RandomId() {
srand((double)microtime()*1000000);
$i = 6;
$pass = '';
while ($i--)
$pass .= rand(1,9);
return $pass;
}
// Genererar identifikation
$contest_nr = RandomId();
