Vinzenz Mai: Passwort Prüffunktion

Beitrag lesen

Hallo Matze,

Eigentlich will ich mir genau das ersparen und trotzdem ein halbwegs vernünftiges Passwort "erzwingen". Also wirklich nur "Müll" raus filtern.

statt (hier Deine Version aus

# Wenn String nur aus einem Zeichen besteht

# Stringlänge ermitteln
    $length = strlen($string);

# Leeres Array erstellen
    $chars = array();

# Einzelne Zeichen in Array aufsplitten
    $chars = str_split($string);

# einzelne Buchstaben auslesen bis Arrayende, $i auf ersten Schlüssel (0) setzen
    for($i = 0; $i < $length; $i++){

# Kontrollvariable beim ersten Durchlauf auf aktuelles Zeichen setzen
       if(!isset($charold)) $charold = $chars[$i];

# wenn Kontrollvariable = aktuelles Zeichen
       if($chars[$i] == $charold){
    # Fehlervariable auf 1 setzen (beim ersten Durchlauf)
           $bad_pwd = '1';
       }else{
    # wenn Kontrollvariable nicht dem aktuellen Zeichen entspricht
    # Fehlervariable auf 0 setzen
           $bad_pwd = '0';
    # Schleife beenden
           $i = $length;
       }
    }
    # Fehlervariable übergeben
    if($bad_pwd == '1') $error = '5';


> > arbeitet bestimmt nicht korrekt, ich verstehe ehrlich gesagt überhaupt nicht, was das soll. Kommentiere Deinen Code!  
>   
> So besser? Wenn die Schleife, ohne das $bad\_pwd auf 0 gesetzt wird weil ein neues Zeichen auftritt, beendet oder durchlaufen wird sind mindestens 2 verschiedene Zeichen im String. Aber wieso ist er nicht fehlerfrei?  
  
Hmm ja, scheint zu funktionieren, ist aber umständlich und schwer nachzuvollziehen.  
  
Verbesserungsvorschläge:  
a) Initialisiere Dein $charold von vornherein mit $chars[0]  
b) Beginne die Schleife daher mit $i = 1  
c) Nutze zum Abbruch die Anweisung [break](http://www.php.net/manual/de/control-structures.break.php)  
  
Nur als Grundideen für vergleichbare Fälle.  
  

> > Ach ja, ich halte es für eine gute Idee, die einzelnen Prüfungen in hübsche kleine einzelne und gut testbare Funktionen zu packen.  
>   
> hmpf, deshalb war im Ausgangspost auch nur der eine Teil ;)  
  
ja - und genau deswegen hättest Du Dein Konzept im Ausgangspost vorstellen  
sollen. Verstehst Du, der geneigte Leser weiß nichts von Deinem Gesamtkonzept.  
  

> Ich versuch mich jetzt noch an einer Abfrage um z.B. "4321" zu unterbinden.  
> Ich such grad eine Funktion um heraus zu kriegen wieviel Schlüssel ein Array hat. Nicht schlagen, ich hab Arrays irgendwie echt vernachlässigt.  
>   
> Wie ich "dcba" vermeiden kann weiß ich noch nicht.  
  
Beides geht gleich:  
Prinzipiell genauso wie aufsteigende Folgen. Nutze den Dekrementoperator :-)  
Alternative: Kehre die Zeichenkette (bzw. das Array) um und prüfe auf aufsteigend ...  
  
Eine Anmerkung noch zum Schluss:  
Die Überprüfung auf Stärke eines Passwortes ist nicht besonders häufig erforderlich. Die Geschwindigkeit der Prüfung ist meiner persönlichen Meinung nach völlig irrelevant.  
  
  
Freundliche Grüße  
  
Vinzenz