webForumDet fria alternativet

random numer generator.

1 svar · 545 visningar · startad av MCGraph

MCGraphMedlem sedan jan. 200616 inlägg
#1

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
#2

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();
Genererad på 360 ms · cache AV · v20260730165559-full.f96bc7eb