Kombination von Zufallszahlen und Buchstaben

droni

Erfahrenes Mitglied
Hallo,

ich brauche ca. 500.000 9-stellige Zufallszahlen/Buchstaben.
Das soll ungefähr so: "EH574H285" aussehen.

Jetzt kann man ja mit rand Zufallszahlen erstellen. Muß ich dann für
die Buchstaben ein Array mit den Buchstaben machen und die dann mit einer Zufallszahl rauspicken?

Und es ist wichtig, dass KEINE Zahl doppelt ist. Das muss ich irgendwie gewährleisten.
Hat da jemand einen Denkanstoß für mich?

Danke
droni
 
Du könntest dabei mit der base_convert()-Funktion arbeiten, um die obere Grenze festzulegen:
PHP:
$rand = rand(0, base_convert('zzzzzzzzz', 36, 10));
echo strtoupper( str_pad(base_convert($rand, 10, 36), 9, '0', STR_PAD_LEFT));
Um keine doppelten zu erhalten, solltest du die einzigartigen in einem Array speichern und bei jeder Generierung prüfen, ob es diese Kombination nicht schon gibt.
 
Da ja keine Zahl doppelt sein darf, würde das Array ja am schluss 499.999 Inhalte haben.

Hoffentlich gibt das beim generieren kein Timeout.
 
was hast du denn dann mit den zufallszahlen vor? in eine datenbank? in ne datei?
evtl. da halt ansetzten.
ansonsten alles in ein array und mit jeder neuen generierung überprüfen ob diese schon vorhanden ist.

mit diesem code erzeug ich meine zahlen
PHP:
$template = "1234567890abcdefghijklmnopqrstuvwxyz";

function GetRandomString($length) {

       global $template;

       settype($length, "integer");
       settype($rndstring, "string");
       settype($a, "integer");
       settype($b, "integer");
       
       for ($a = 0; $a <= $length; $a++) {
               $b = rand(0, strlen($template) - 1);
               $rndstring .= $template[$b];
       }
       
       return $rndstring;
       
}

$id = GetRandomString(10);
 
Ahso...das wirds wohl sein :-(

Mich würde interessieren, ob mit "Das soll ungefähr so: EH574H285 aussehen." gemeint ist...2Buchstaben+3Ziffern+Buchstabe+3Ziffern?

Falls nicht, würd ich da einfach den md5() einer Zufallszahl nehmen, alles nach 9 Stellen abschneiden und halt die von Gumbo erwähnte Prüfung auf Einzigartigkeit vornehmen.

PHP:
<?php
$max=500000;
$arr=array();
while(count($arr)<$max)
  {
    array_push($arr,strtoupper(substr(md5(mt_rand(1,1000000)),0,9)));
    array_unique($arr);
  }
echo implode('<br>',$arr);
?>
Das interessante bei der Sache wird wohl eher sein, wie man es am Schonendsten macht.
 
Zurück