Buchstaben generieren?

jackie05

Erfahrenes Mitglied
Hallo,
gibt es in PHP ne einfache Methode z.B. 20 stellige Buchstaben zu generieren?
z.B. dfssdgcvxbfsasfsvdse
dass dann halt solche Buchstaben dabei rauskommen.

Vielen Dank schonmal.

MfG Chris
 
Hallo,

was du meinst, sind wohl eher Wörter, keine Buchstaben. Buchstaben sind nur sehr selten mehrstellig ;) Im PHP-Handbuch finden in den Kommentaren zur Methode [phpf]rand[/phpf] einige Codeschnipsel, die deinen Anforderungen entsprechen sollten.

Grüße,
Matthias
 
PHP:
$length = 20;
$chars = 'abc…xyz';
$charCount = strlen($chars);
$string = '';
for( $i=0; $i<$length; $i++ ) {
	$string .= $chars{rand()%$charCount};
}
 
Wie würde es dann mit Zahlen und Buchstaben aussehen?

Also als Beispiel: Fb2z5G0

Es sollten bei 6Zeichen 3-4 Gross und Kleinbuchstaben enthalten sein der rest Zahlen!

Wie müsste ich es dann aufbauen?
 
meine Interpretation
PHP:
$length = 20;
$chars = 'abc…xyzABC...XYZ0123456789';
$charCount = strlen($chars);
$string = '';
for( $i=0; $i<$length; $i++ ) {
    $string .= $chars{rand()%$charCount};
}
 
Wieso denn noch rand(), denn der ist doch qualitativ schlechter als mt_rand() und zudem langsamer.

Meine Idee wäre:
20 Zufallszahlen durch chr() umwandeln, man müsste natürlich noch bestimmte Bereiche (65-90 u. 97-122) angeben

Das würde alles weit einfacher machen und sparen, dass man vorher alle Buchstaben und Zahlen umständlich aufschreibt

PHP:
<?php

$string='';
for($i=1;$i<=20;$i++){
  $int=(mt_rand(0,1)==0)?mt_rand(65,90):mt_rand(97,122);
  $string.=chr($int);
}

echo $string; //pAsXfkFQATegnptKkQVf

?>
 
Zuletzt bearbeitet:
Diese Funktion habe ich irgendwann mal in diesem Forum als Antwort gesehen:
PHP:
<?
function generate_pw($pwlaenge) {
    while (strlen($pass) < $pwlaenge) {
      $array[1] = chr(rand(48,57));  // mit chr kann man bestimmte ASCII Zeichen ausgeben, im Bereich 48-57 befinden sich die Ziffern 0-9
      $array[2] = chr(rand(65,90));  // im Bereich 65-90 befinden sich A-Z
      $array[3] = chr(rand(97,122));  // im Bereich 97-122 befinden sich a-z
      $pass .= $array[rand(1,3)];
    }
    return $pass;
  }
?>
 
Ich würde allerdings die Version von tobias_petry bevorzugen, da sie etwas performance sparender ist!
Oder meine etwas umschreiben, undzwar so, dass nicht immer zwangsweise alle 4 rand's aufgerufen werden!
 
Was die vorgeschlagenen Algorithmen angeht, ist meine noch die effizienteste. Sie ist gegenüber Tobias’ Vorschlag doppelt und gegenüber Jons Vorschlag sogar fast fünf mal schneller. Die Ursache dafür ist vor allem das mehrfache Generieren einer Zuffalszahl, was bei meinem Algorithmus nur einmal geschieht. Ein weiterer Vorteil meines Algorithmuses ist, dass das Alphabet beliebig gewählt oder erweitert werden kann und somit auch als Parameter der Funktion übergeben werden könnte, beispielsweise:
PHP:
function randString( $length=12, $charset='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' )
{
	$retVal = '';
	$cardinality = strlen($charset);
	for( $i=0; $i<$length; $i++ ) {
		$retVal .= $charset{mt_rand()%$cardinality};
	}
	return $retVal;
}
 
Zurück