Viele dank Leute, daß ihr mich für einen Trotel haltet, daß Schnellschüsse veröffentlicht. Das Programm ist korrekt und funktioniert auch. Allerdings muß ich zugeben, daß sich paar kleine Fehler eingeschlichen die nicht sofort erkennbar waren. Aber der Reihen nach:
@Luncustaf
Das Datum wird nicht erkannt.
Ja, das kommt dadurch, daß im Ausweis das Datum das YYMMDD Format hat. Delphi kennt das DDMMYY Format (Standardeinstellung). Ich hab das falsch ausgelesen und an einer Stelle Tag und Jahr vertausch. Dadurch konnte passieren, daß es plötzlich den 74 Feb. 03 gab. Ok, der Fehler ist beseitigt. Anscheinend hab ich beim Testen mit Zahlen gearbeitet die kleiner 12 waren. Dadurch ist der Fehler nicht aufgefallen.
Der zweite Datumsfehler ist ... naja. Ok, er ist da. Es handelt sich hier um das Geburtsdatum. Für Delphi ist eine Zweistelliges Jahr (also YY) ein Jahr aus dem aktuellen Jahrhundert. Also ist das Geburtsdatum 74 für Delphi jetzt nicht 1974, sondern 2074. Somit wurde 74 als Datum der Zukunft gedeutet. Ich hab diese Überprüfung ganz entfernt, da ich sowieso das Alter nicht prüfen wollte. Allerdings baue ich vielleicht später eine neue Überprüfung rein. Problematisch ist nicht das Jahr 74 als Geburtsdatum, sondern 01. Es kann 1901 und 2001 beduten. Da muß eben eine kleine Logik eingebaut werden.
@Luckie
Die Eingabemaske stimmt nicht ganz.
Die stimmt schon. Allerdings hab ich bemerkt, daß sich die Nummer um eine Zeichen erhöht hat, und zwar um ein "<". Ob das jetzt neu ist, weiß ich noch nicht. In allen mir bekannten Dokmenten darüber (auch offiziellen), ist der letzte Platzhalter 6 Zeichen lang. Vielleicht hat man ihn jetzt um ein Zeichen erhöht. Ich werde es nachprüfen. Allerdings hat das kein Einfluß auf die Eingabemaske selbst. An den Nicht-Platzhaltern hat sich nichts verändert.
@MathiasSimmack
Auch du Brutus?
Gedankenfehler.
Nein, da ist kein Gedankenfehler. Die Prüfung wird korrekt durchgeführt. Wenn du dir den Code ansiehst, dann wirst du feststellen, daß zuerst die erste Zahlenreihe geprüft wird, dann die zweite, dann die dritte und zum Schluß alles zusammen. Bei der letzten Überprüfung wurden die drei kleinen Prüfsummen mit einbezogen. Ich habs also schon richtig berechnet. Hätte ich es nicht gemacht, dann würde ich mich in dem Forum nie wieder blicken lassen. So ein Fehler wäre unverzeilich. Wieso es nicht funktionierte steht oben. Es waren nur die Datumsfehler die ich zum Schluß noch schnell eingebaut habe. Anscheinend zu schnell. Aber ich dachte mir, daß man auch das Geburts und Ablaufdatum prüfen sollte.
Bei den Code den du geschrieben hast, hast du wahrscheinlich nur die Prüfsummen berechnet, aber nicht überprüft ob es nur Zahlen sind oder das Datum logisch ist. Aber in meinem Programm wird sowas überprüft. Es ist also nicht nur eine Überprüfung, sonder mehrere, bzw. wird überprüft ob die Werte Unsinn enthalten.
Das mit dem DateSeparator war ein guter Tip und ich hab das eingebaut.
Das mit der Unit-Dialogs ist noch ein Überbleibsel meine ShowMessage Meldung die ich dann entfernt habe. Die Unit habe ich dabei vergessen.
Das mit dem IsLeapYear ist ein gutter Tip, aber er würde den Code kaum verkürzen. So aber sieht man wenistens, daß ich die Überprüfung auch von hand behersche
Und zum Schluss: die IsNum Funktion. So Schlau bin ich auch. Nur vergißt du hier, daß die Val Variante auch "-" Minus akzeptiert und nur Zahlen bis Max-LongInteger. Wenn ich aber die letzte Prüfsumme berechne, dann hab ich eine Zahlenkette von 24 Zahlen. Das past nicht in einen Integer. Es mußte also eine extra Routine her