Zufallscode generieren

Hallo,

ich möchte mit php einen 20stelligen Zufallscode generieren. Der Code soll sich aus Groß- und Kleinbuchstaben sowie aus Zahlen zusammensetzen.
Ich weiß das die Funktion “rand” dabei vorkommt aber sonst bin ich völlig ratlos. Könnte mir vielleicht jemand einen fertigen Script geben?

Hi,

hier ein Snippet aus meinem Captcha-Script. Sollte genau das können. Lesen,v erstehen - nicht blind kopieren :wink:

[code]<?php

function randomString($len) {
function make_seed(){
list($usec , $sec) = explode (’ ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());

  //Der String $possible enthält alle Zeichen, die verwendet werden sollen
  $possible="abcdefghiklmnpqrtuvwxyz1234567890";
  $str="";
  while(strlen($str)<$len) {
    $str.=substr($possible,(rand()%(strlen($possible))),1);
  }

return($str);
}

$ausgabe = randomString(20); //20 Stellen
?>[/code]

Lesen, ja. Verstehen, leider nein^^

Vielen Dank, genau das was ich brauch!!!

Wie gesagt ist das ein Teil meines alten Captcha-Generators und muss entsprechend noch an deine Bedürfnisse angepasst werden.

google.de/search?q=php+zufal … =firefox-a :slight_smile:

[code]<?php

function randomString($len) {
// Der teil hier bereitet den “zufall” vor, er richtet sich nach der zeit (da gibts verschiedene möglichkeiten)
function make_seed(){
list($usec , $sec) = explode (’ ', microtime());
return (float) $sec + ((float) $usec * 100000);
}
srand(make_seed());

  //Der String $possible enthält alle Zeichen, die verwendet werden sollen
  $possible="abcdefghiklmnpqrtuvwxyz1234567890";

// Dein zufallsstring
$str="";
//solange der kürzer ist, wie die angegebene länge $len…
while(strlen($str)<$len) {
// hänge hinten dran:
// substr holt einen buchstabena us dem string $possible, von der stelle rand()%(strlen($possible)) mit der länge 1 - also einen buchstaben, wäre die letzte zahl 2, würde er jedesmal um cd oder hi oder so länger werden.
$str.=substr($possible,(rand()%(strlen($possible))),1);
}
return($str);
}

$ausgabe = randomString(20); //20 Stellen
?>[/code]

hoffe ich konnte es dir näher bringen
gruß emil


Wenn man nur ein einzelnes Zeichen aus dem String haben will, kann man sich dieses auch direkt (ohne extra Funktion) holen:
[code]$str .= $possible[ rand() % strlen($possible) ];[/code]
Das hat den gleichen effekt ist aber etwas kürzer :wink:
Nachteil: wenn man nicht aufpasst kann man $possible für ein Array halten.

Wenn man nur ein einzelnes Zeichen aus dem String haben will, kann man sich dieses auch direkt (ohne extra Funktion) holen:

Das hat den gleichen effekt ist aber etwas kürzer :wink:
Nachteil: wenn man nicht aufpasst kann man $possible für ein Array halten.

in Anbetracht dessen das PHP C/++ like ist, ist es net so abwegig…
aber geht es tatsächlich in PHP bei nem normalen String via Index nen Char zu erhalten?

Weiß net ob ichs jeh gewusst hab bzw. genutzt hab… hast du es getestet?

PS: nen String ist ein Array :wink: Nen Char Array :wink: Oder auch Byte/Int Array. Nur net jede Sprache lässt sowas zu.

Ja, das geht wirklich:
de.php.net/manual/de/language.types.string.php Abschnitt “String access and modification by character”

Man kann auch {} statt [] verwenden (also $foo{13}), allerdings ist diese Variante laut oben genannter Quelle ab PHP 6 deprecated, es ist also besser, wenn man sie sich erst gar nicht angewöhnt.

Im Endeffekt (oder besser im Anfangsprefekt?) ist ein String schließlich nur ein Char-Array und daher ist diese Methode, auf ein Zeichen zuzugreifen, ein Überbleibsel aus vergangeneren Zeiten, das man wohl liebgewonnen hatte.