In manchen Situationen benötigt man einen generierten Zufalls-String. Dies kann z.B. das Initial-Passwort für einen Benutzer-Login einer Anwendung sein. Im folgenden stelle ich eine kleine einfache Funktion für die Lösung dieses Problems vor.

Die Funktion erwartet einen Pflichtparameter vom Typ INTEGER zur Festlegung der Länge des Zufalls-Strings. Optional können zwei weitere Parameter an die Funktion übergeben werden:

  • useNumbers integriert Ziffern in den Zufalls-String
  • useSpecialChars integriert Sonderzeichen in den Zufalls-String

Beide optionalen Parameter sind vom Typ BOOLEAN und standardmäßig false.

Als Rückgabewert erhält man einen String der von der Funktion zufällig erzeugt wurde, wobei keine doppelten Ziffernfolgen vorkommen.

In den Zeilen 18-20 werden die Inhalte der verschiedenen Zeichengruppen (Buchstaben, Ziffern und Sonderzeichen) festgelegt. Diese können nach Belieben angepasst werden.

Ich habe z.B. Zeichen und Ziffern entfernt, die schnell zu Verwechslungen führen: 1, l, i, L, I, O, 0. Zeile 24 weist dann unserem Zeichen-Pool die Standard-Zeichengruppe der Buchstaben zu.

In den Zeilen 24-32 werden diesem Zeichen-Pool die Ziffern und/oder die Sonderzeichen hinzugefügt, sofern der entsprechende optionale Parameter beim Funktionsaufruf auf true gesetzt wurde. Der nun komplette Zeichen-Pool wird in Zeile 34 gemischt. Dabei hilft uns die PHP-Funktion shuffle.

Die Zeilen 35-50 erstellen jetzt den Zufalls-String. Zeile 35 gibt einen zufälligen Index aus dem Zeichen-Pool zurück. Mit diesem Index holen wir uns das entsprechende Zeichen aus dem Zeichen-Pool (Zeile 43/45). Dabei wird der anhand des aktuellen Index mit der Modulo-2-Operation entschieden ob das Zeichen als Kleinbuchstabe oder als Großbuchstabe an unseren Zufalls-String angehängt wird. Ergibt die Modulo-Operation Null (0) so wird ein Kleinbuchstabe angefügt, ansonsten ein Großbuchstabe.

Die Zeilen 38-40 überprüfen noch, ob der aktuelle Index, dem Index der vorherigen Iteration entspricht. Sollte dies der Fall sein, so wird an der aktuellen Stelle abgebrochen und sofort eine neue Iteration gestartet. Dies verhindert ein mehrfaches Anfügen des selben Zeichens.

Schließlich gibt Zeile 52 unseren neu generierten Zufalls-String an die aufrufende Anwendung zurück. Zu all der Theorie hier der entsprechende Sourcecode:

Die hier vorgestellte Funktion ist eine einfache Implementierung. Sie lässt entsprechend Platz für eigene Erweiterungen und Anpassung an die eigenen Problemstellungen. Ich freue mich über Anregungen (und Kritik) zur vorgestellten Funktion.