MCGraphMedlem sedan jan. 200616 inlägg
Jag använder följande kod som jag tror ska generera de antal siffror som jag vill få fram...!
function RandomId() {
$chars = "123456789";
srand((double)microtime()*1000000);
$i = 1;
$pass = '';
while ($i <= 6) {
$num = rand(0,9);
$tmp = substr($chars, $num, 1);
$pass = $pass.$tmp;
$i++;
}
return $pass;
}
// Genererar identifikation
$contest_nr = RandomId();
där while ($i <= 6) bestämmer hur lång denna sifferkod ska bli!
Men nu till saken! Det är så atti sällsynta fall så är det bara 5 siffror!
Undrar om någon kan se något fel eller varför den pendlar mellan 5-6 siffror...
Jag skulle vilja att det alltid blir EXAKT 6 siffror.
nitro2k01Medlem sedan aug. 20037 630 inlägg
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();