Vinzenz Mai: Passwort Prüffunktion

Beitrag lesen

Hallo Matze,

nungut, ab 9 wirds bei der Funktion zur Erkennung von einer aufsteigenden Reihe schwierig. Praktisch kommt danach die 10, für PHP aber 1 und 0. Somit ist das ganze Konstrukt, so schön es auch war ^^, unbrauchbar.

ich denke, Du denkst zu kompliziert.
Es geht Dir hier um *einfache* Überprüfungen.
Es geht um einfache Überprüfungen von _Zeichen_ einer Zeichengruppe.
Es geht nicht um die Bedeutung von zusammengesetzten Zeichen.
Genauso könntest Du argumentieren:

56710

ist nicht erlaubt, da vier aufeinanderfolgende Zahlen im Oktalsystem

1112123

ist nicht erlaubt, da es aufeinanderfolgende Stundenzahlen einer Analoguhr sind.

27281

ist nicht erlaubt, weil es aufeinanderfolgende Tage im Februar/März eines Nichtschaltjahres sind.

Wie willst Du 117118 berücksichtigen, wie 127012 oder 127001002 wegen 128-er-System?

Alles nicht besonders sinnvolle Prüfungen (meiner Meinung nach). Das gehört bestenfalls in ein Wörterbuch.

Aufsteigend in einer Zeichengruppe wäre - und Du musst das definieren und dokumentieren - z.B. 3456 und 7890.

Ähnlich verhält es sich mit Buchstaben:

xyzabc wäre z.B. als aufsteigend definierbar.
Aber was machst Du, wenn Du statt der 26 Buchstaben des englischen Alphabets den UTF-8-Zeichenvorrat zulässt? Wie prüfst Du dann? Siehe z.B. dieses Archivposting von dedlfix.

Hast du vielleicht noch andere Ideen was ich prüfen könnte?
An das aaa bzw. 111 hatte ich heut morgen z.B. noch gar nicht gedacht, obwohl es doch so naheliegend ist.

Prüf' nicht zuviel :-)
Wenn Du mehr als eine Zeichengruppe verlangst, dann werden andere Prüfungen obsolet. Ein "##" oder ein "aa" oder "ab" in einem Passwort, das aus mehreren Zeichengruppen besteht schadet im Allgemeinen nicht.

Wichtig ist, dass Du Dir die Regel, nach der eine Prüfung stattfindet vorher aufschreibst, im Kommentar zur Funktion dokumentierst. Wie Du diese Regel prüfst, das wiederum ist für die Anwendung der Prüfung selbst völlig gleichgültig - Hauptsache das Ergebnis ist gemäß Prüfrichtlinie korrekt.

Wenn Du also 78901 nicht als aufsteigend definierst, dann muss

bool function ist_aufsteigend($string)

false zurückliefern. Definierst Du 78901 als aufsteigend, dann eben true.
Nochmals:
1. Schritt: Definition der Prüfrichtlinie
2. Schritt: Dokumentation der Prüfrichtlinie
3. Schritt: Erstellen eines Testes für die Funktion
4. Schritt: Umsetzen in einen Algorithmus
5. Schritt: Testen der Funktion

Später kannst Du alternative Algorithmen (siehe z.B. die Varianten mit Array-Funktionen) durchtesten und ggf. ersetzen. Wichtig ist, dass die Funktion gemäß Spezifikation korrekt arbeitet. Wie sie das macht, ist zweitrangig.

Freundliche Grüße

Vinzenz