webForumDet fria alternativet
Logga in / Bli medlem

random numer generator.

PHP

1 svar · 547 visningar · startad av MCGraph

Medlem sedan jan. 200616 inlägg
Trådstart#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.

Medlem sedan aug. 20039 340 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();
387 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
121 ms — deklarationer (db)
127 ms — hämta statistik (db)
135 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)