humdpi: zufallsstring erzeugen

hallo,
ich habe eine frage: ich muss fast 1.000.000 verschiedene codes erzeugen, die aus groß und kleinbuchstaben und zahlen bestehen, ohne null und o (Beispiel: uQgBLUa59m).
diese müssen eindeutig sein, ich muss sie in eine datenbank speichern.
bis jetzt habe ich folgenden code verwendet, um diesen string zu erzeugen:

function RandomString($len){  
    $randstr = '';  
    srand((double)microtime()*1000000);  
    for($i=0;$i<$len;$i++){  
        $n = rand(48,120);  
        while (($n >= 58 && $n <= 64) || ($n >= 91 && $n <= 96)){  
            $n = rand(48,120);  
        }  
        $randstr .= chr($n);  
    }  
    return $randstr;  
}

leider erzeugte diese funktion immer dieselben codes, dh es wird nicht zufällig ein code erzeugt sonder es wird immer die gleiche reihenfolge an "zufallcodes" erzeugt. mit ein paar gleichen codes kann ich ja umgehen, ich schau halt vorher in der datenbank ob es diesen schon gibt, aber so wie das jetzt funktioniert habe ich quasi eine endlosschleife...

kann mir da vielleicht wer helfen wie man das improven kann oder eine andere funktion zur verfügung stellen? wäre sehr nett!

Danke und LG!

  1. Hi,

    kann mir da vielleicht wer helfen wie man das improven kann oder eine andere funktion zur verfügung stellen? wäre sehr nett!

    Schritt 1: Falls Du ein PHP < 4.2 hast, ersetze es durch eine aktuelle Version.

    Schritt 2: Streiche den srand()-Aufruf.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Schritt 1: Falls Du ein PHP < 4.2 hast, ersetze es durch eine aktuelle Version.

      php version ist 5.3.5. was ändert das?

      Schritt 2: Streiche den srand()-Aufruf.

      habe ich, ändert auch nichts ://

  2. Tach!

    leider erzeugte diese funktion immer dieselben codes, dh es wird nicht zufällig ein code erzeugt sonder es wird immer die gleiche reihenfolge an "zufallcodes" erzeugt.

    Bei mir nicht, weder ohne noch mit dem überflüssigem srand(), alles schön zufällig. srand() ist nicht nötig, weil PHP selbst seeded, und wenn nicht, dann müsste man das nur einmal pro Script und nicht ständig machen.

    ohne null und o

    Diese Bedingung ist allerdings nicht erfüllt (O würde ich ebenfalls ausklammern).

    Und statt rand while rand würde ich do rand while nehmen. Oder vielleicht besser, aus einen String mit allen erlaubten Zeichen den Zufall eins wählen lassen.

    dedlfix.

    1. Moin!

      Oder vielleicht besser, aus einen String mit allen erlaubten Zeichen den Zufall eins wählen lassen.

      Genau. Die benutzbaren Zeichen sind recht uebersichtlich. Da wuerde ich ein Array mit erlaubten Zeichen nehmen und Dann per Zufall eines waehlen. Erspart wildes Rumgeschleife, weil 10x hintereinander ein nicht gueltiges Zeichen 'gewuerfelt' wurde.

      Und wenn dann einer kommt und meint Nullen muessten doch drin sein, dann fuegt man die einfach zum Array, statt im Code rumzumachen.

      --
      Signaturen sind blöd!
  3. Hi!

    Sowas aehnliches hab ich mal fuer Passwoerter gemacht. Konnte ich dann aber nicht verwenden, da durchaus mal sowas wie 4h0ok3rt, aOCHs3mc oder LaOVemEt rauskam. Ersteres is klar: Hooker. Dann der Ochse. Letzteres wurde dann durchaus als Love Me aufgefasst. Kann ich nicht verschicken. Gibt Aerger. Wir vergeben Passwoerter wieder per Hand. Die taugen dann nur was zum Passwort generieren und gut is. Da hab ich wenigstens schonmal Dankesschreiben fuer das suesse Passwort bekommen, wenn ich sowas wie Schnabeltier benutzt habe.

    --
    Signaturen sind blöd!
    1. Om nah hoo pez nyeetz, Steel!

      Sowas aehnliches hab ich mal fuer Passwoerter gemacht. Konnte ich dann aber nicht verwenden, da durchaus mal sowas wie 4h0ok3rt, aOCHs3mc oder LaOVemEt rauskam. Ersteres is klar: Hooker. Dann der Ochse. Letzteres wurde dann durchaus als Love Me aufgefasst. Kann ich nicht verschicken. Gibt Aerger. Wir vergeben Passwoerter wieder per Hand. Die taugen dann nur was zum Passwort generieren und gut is. Da hab ich wenigstens schonmal Dankesschreiben fuer das suesse Passwort bekommen, wenn ich sowas wie Schnabeltier benutzt habe.

      LOL, eher leise schmunzeln

      Matthias

      --
      1/z ist kein Blatt Papier.

      1. Hi!

        LOL, eher leise schmunzeln

        Bisher hatte ich solche Leetspeak passwoerter bei mir selber eher nicht. Ein Spiel habe ich allerings, dessen Onlineversion mir immer wieder nette Varianten gibt. die dort generierten Passwoerte haben das Schema 3 Buchstaben 2 Ziffern 3 Buchstaben. Neulich lasse ich mir mein Passwort resetten und bekomme kifNNdub wobei NN das Geburtsjahr meines Vaters war. Das Passwort hab ich gleich so gelassen, das kann ich mir gut merken. Mein kiffender Vater (eher unwahrscheinlich) sitzt vor nem alten Tapedeck und ueberspielt Musik. Ein tolles Bild! :D Auch ne Moeglichkeit, sich Passwoerter zu merken.

        --
        Signaturen sind blöd!
        1. Om nah hoo pez nyeetz, Steel!

          Ein Spiel habe ich allerings, .. kifNNdub wobei NN das Geburtsjahr meines Vaters war.

          Zwei Fragen:

          * welches Spiel?
          * wie alt ist dein Vater?

          :D

          Matthias

          --
          1/z ist kein Blatt Papier.

          1. Hoi!

            * welches Spiel?
            * wie alt ist dein Vater?

            ;)

            --
            Signaturen sind blöd!