Simon: Zufallscode

Hi,
ich hab hier eine Funktion gefunden die einen Zufallscode macht.
Jetzt frag ich mich ob diese auch (selbst bei der geringsten Wahrscheinlichkeit) einen Code 2 mal ausgibt?

Hier mal die Funktion:

<?  
  function password($size)  
  {  
    $result = "";  
  
    srand((double)microtime()*1000000);  
  
    for($i=0; $i < $size; $i++)  
    {  
      $num = rand(48,120);  
      while (($num >= 58 && $num <= 64) || ($num >= 91 && $num <= 96))  
         $num = rand(48,120);  
  
      $result .= chr($num);  
    }  
    return $result;  
  }  
  
  $pw = password(8);  
?>

MfG
Simon

  1. hi,

    Jetzt frag ich mich ob diese auch (selbst bei der geringsten Wahrscheinlichkeit) einen Code 2 mal ausgibt?

    warum sollte sie nicht?

    1. warum sollte sie nicht?

      Ich meine 2 mal den Selben

      1. hi,

        Ich meine 2 mal den Selben

        das nein. Vielleicht aber 2 mal den Gleichen?

        1. »» das nein. Vielleicht aber 2 mal den Gleichen?

          Und was ist der Unterschied zwischen "selben" und "gleichen"??

          Ich dachte mir nur dass durch die Verwendung von microtime ein selber/gleicher code nicht möglich ist. Oder hab ich da was falsch verstanden ?

          1. die Wahrscheinlichkeit ist gering, aber möglich.

          2. Hi!

            Und was ist der Unterschied zwischen "selben" und "gleichen"??

            Dein Zwillingsbruder mag zwar gleich aussehen, aber er ist nicht die selbe Person wie du.

            Ich dachte mir nur dass durch die Verwendung von microtime ein selber/gleicher code nicht möglich ist. Oder hab ich da was falsch verstanden?

            Durch die nicht notwendige Verwendung (siehe PHP-Handbuch) von srand() mit einem relativ vorhersagbaren Wert erhöht sich nur die Vorhersagbarkeit des Ergebnisses, nicht jedoch seine Einzigartigkeit. Der Zufallszahlengenerator garantiert zu keiner Zeit und unter keiner Bedingung, dass sich Zahlen nicht wiederholen. Das macht der "echte Zufall" auch nicht. Sich nicht wiederholende Zahlen bekommst du nur mit einer zusätzlichen Verwaltung der bereits verbrauchten Zahlen.

            Lo!

  2. übrigens benötigst du srand nicht mehr, falls du eine php version > 4.2.0 verwendest.

    srand

  3. Hallo Simon,

    Jetzt frag ich mich ob diese auch (selbst bei der geringsten Wahrscheinlichkeit) einen Code 2 mal ausgibt?

    Überlege doch einmal was genau du dort machst..

    Du erzeugst Zufallszahlen im Bereich [48;120], aus denen du anschließend noch welche ausschließt. Effektiv hast du also 60 verschiedene Zahlen, die zulässig sind.
    Wenn du nun deine Funktion 61 mit dem Parameter 1 aufrufst muss doch zwangsweise (mindestens) ein Wert doppelt vorkommen..

    Grüße
      David

    --
    >>Nobody will ever need more than 640k RAM!<<
    1981 Bill Gates
  4. Hello,

    ich hab hier eine Funktion gefunden die einen Zufallscode macht.
    Jetzt frag ich mich ob diese auch (selbst bei der geringsten Wahrscheinlichkeit) einen Code 2 mal ausgibt?

    haben wir neulich erst eine kleine Versuchsreihe dazu gehabt :-)

    http://forum.de.selfhtml.org/archiv/2009/6/t187722/#m1248234

    Der Code mit Array_Rand() von globe erzeugt auf einem 32-Bit-PHP (5.2.9 aus dem Xampp-Paket) auf Windows XP eine erhebliche Anzahl von Doubletten. Globe konnte aber auf seinem 64-Bit-System keine doppelten Schlüssel (bei 10.000 Versuchen) feststellen.

    Der (korrigierte) Code mit klassischen Stringfunktionen hat immer einwandfrei gearbeitet.

    Die Klasse von Globe müsste allerdings auch nochmal diskutiert werden. Da sind mMn ein paar Dinge noch nicht sauber gelöst. Hab ich allerdings vergessen, muss ich zugeben.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de