Zum Hauptinhalt springen
Wer altersbeschränkte Ware verkauft, muss wissen, wie alt der Käufer ist. Eine Abfrage des Geburtsdatums hilft dabei wenig, denn sie lässt sich beliebig beantworten. WEBSALE V8s geht deshalb über die Ausweisnummer. In der Nummer eines deutschen Personalausweises oder Reisepasses steckt das Geburtsdatum, und jeder Block der Nummer trägt eine Prüfziffer. Der Shop rechnet diese Prüfziffern nach und liest das Geburtsdatum aus. Eine ausgedachte Nummer fällt dabei mit hoher Wahrscheinlichkeit durch. Personalausweisnummer Eingabe
Das ist eine Plausibilitätsprüfung, keine Identitätsprüfung. Der Shop rechnet nach, ob die Nummer aufgebaut ist wie eine echte. Er prüft nicht, ob dieser Ausweis existiert und ob er der Person gehört, die gerade bestellt. Wo ein belastbarer Altersnachweis gefordert ist, reicht dieses Verfahren allein nicht aus.
Die Prüfung kostet nichts und muss nicht freigeschaltet werden. Sie richten sie vollständig über die shop.config und Ihre Templates ein.

Wie die Prüfung arbeitet

Personalausweis

Die Personalausweisnummer besteht aus vier Blöcken, und jeder Block trägt am Ende seine eigene Prüfziffer. Entsprechend fragt der Shop sie in vier Feldern ab. Hmfile Hash 0c33afdd Das fünfte Feld gibt es nur intern. Der Shop setzt darin die Eingaben zusammen, um die Gesamtprüfziffer nachzurechnen. Sie legen es an, bauen aber kein Eingabefeld dafür. Bei neueren Personalausweisen steht vor der Gesamtprüfziffer noch eine vierstellige Versionsnummer. In diesem Fall ist IdentityCard4 nicht ein, sondern fünf Zeichen lang. Der Shop erkennt beide Bauarten.

Reisepass

Die Reisepassnummer besteht ebenfalls aus mehreren Blöcken, wird aber in einem einzigen Feld PassportNumber1 abgefragt. Der Käufer überträgt die untere Zeile aus seinem Pass, ohne Leerzeichen. 20181017 Reisepassnummerpruefung
Der Buchstabe D und das M beziehungsweise F gehören mit ins Eingabefeld. Eine Reisepassnummer ohne diese beiden Zeichen weist der Shop zurück. Weisen Sie den Käufer im Beschriftungstext darauf hin, sonst scheitern korrekte Eingaben an einem Missverständnis.
Kürzer als 26 Zeichen wird die Nummer nicht angenommen. Ab 28 Zeichen behandelt der Shop sie als Nummer der neueren Bauart.

Altersprüfung

Das Geburtsdatum steckt in der Nummer, deshalb kann der Shop daraus das Alter ausrechnen.
Die Altersgrenze ist fest auf 18 Jahre eingestellt und lässt sich nicht konfigurieren. Andere Grenzen wie 16 Jahre sind mit dieser Prüfung nicht abbildbar.

Was ein leeres Feld bedeutet

Ein leeres Feld besteht jede inhaltliche Prüfung. Gültigkeitsprüfung, Altersprüfung und Höchstlängenprüfung greifen nur, wenn überhaupt etwas eingetragen wurde. Zur Pflicht wird ein Feld allein durch eine Mindestlängenprüfung mit Type = minlen und Len = 1. Diese eine Prüfung ist der Grund, warum in den Konfigurationsbeispielen unten so viele Blöcke stehen.

Fehlermeldungen: allgemein statt genau

Sie können dem Käufer anzeigen lassen, welcher Block seiner Eingabe nicht stimmt. Das erleichtert die Korrektur, macht aber auch das Ausprobieren leichter: Wer blockweise Rückmeldung bekommt, kann sich Ziffer für Ziffer an eine formal gültige Nummer herantasten. Die Beispiele auf dieser Seite verzichten deshalb auf blockgenaue Rückmeldung und geben nur einen allgemeinen Hinweis aus.

Voraussetzung: Abfrage auf deutsche Kunden beschränken

Geprüft werden können nur deutsche Ausweise. Käufern mit ausländischer Rechnungsadresse dürfen die Felder deshalb gar nicht erst erscheinen. Dafür brauchen Sie drei Dinge, unabhängig davon, ob Sie den Personalausweis, den Reisepass oder beides abfragen. Erstens muss das Länderfeld aktiv sein, denn die Sichtbarkeitsregel fragt es ab.
Zweitens braucht das Land eine Vorbelegung, damit die Regel schon beim ersten Aufruf des Formulars greift.
Drittens hängen Sie die Ausweisfelder an dieses Land.
ResetIfHidden = yes leert die Felder, sobald der Käufer sein Land wechselt. Ohne diese Einstellung bliebe eine bereits eingegebene Ausweisnummer in den Daten stehen, obwohl das Formular sie nicht mehr zeigt. Damit das Ein- und Ausblenden schon während der Eingabe passiert und nicht erst nach dem Absenden, gehört zum Länderfeld das Nachladen der Adressfelder. Wie das eingerichtet wird, steht bei der eingabeabhängigen Adressdatensteuerung. Referenz: Abschnitt AddressFields-Txt · Abschnitt AddressFields-Standards · Abschnitt AddressFields-InputVisibility

Personalausweisnummer abfragen

Schritt 1: Felder anlegen

Der Text hinter IdentityCard5 erscheint nirgends. Er muss nur dastehen, damit das Feld aktiv ist.

Schritt 2: Höchstlänge der Eingabefelder

Setzen Sie IdentityCard4 auf 5, wenn Sie auch Ausweise der neueren Bauart mit vierstelliger Versionsnummer aufnehmen wollen. Referenz: Abschnitt AddressMaxInputLen

Schritt 3: Fehlertexte hinterlegen

Fehlertexte bekommen eine Kennung, auf die sich die Prüfungen später berufen. Sie stehen im Abschnitt <ErrorMessages> innerhalb von <InputCheck>.
~FieldName~ ersetzt der Shop durch die Beschriftung des Feldes, das den Fehler ausgelöst hat. Findet der Shop zu einer ErrorMessageID keinen Eintrag, greift er auf den Text unter Default zurück. Ein Tippfehler in der Kennung fällt deshalb nicht als Fehler auf, sondern als unerwartet allgemeine Meldung.

Schritt 4: Prüfungen festlegen

Die Feldnamen in AddressField sind fest vorgegeben und dürfen nicht geändert werden.
Drei Punkte zu diesem Beispiel:
  • Die Gültigkeitsprüfung läuft über vier Felder, aber nicht über dieselben vier wie die Pflichtfeldprüfung. IdentityCard1, IdentityCard2 und IdentityCard3 tragen je eine eigene Blockprüfziffer, die einzeln nachgerechnet wird. IdentityCard5 trägt die Gesamtprüfziffer. IdentityCard4 ist diese Gesamtprüfziffer selbst und wird deshalb nicht geprüft, sondern zum Prüfen verwendet.
  • Die Altersprüfung gehört auf IdentityCard2, denn nur dort steht das Geburtsdatum. Auf ein anderes Feld gesetzt, liest sie sinnlose Werte.
  • Soll nur die Gültigkeit geprüft werden und nicht das Alter, lassen Sie den dritten Block weg.
Ergänzen Sie nach demselben Muster je einen Block mit Type = maxlen für IdentityCard1 bis IdentityCard4, mit denselben Längen wie in Schritt 2. Referenz: Abschnitt InputCheck

Schritt 5: Eingabefelder ins Template

Die Felder gehören innerhalb des <form> auf die Adressseite im Bestellablauf (ws_address_combined.htm) und auf die Adressverwaltung im Kundenkonto (ws_address_manage.htm). Der Fehlertext zur Gültigkeitsprüfung erscheint an A-IdentityCard5_errormessage, weil nur dieses Feld die vollständige Nummer kennt. Deshalb steht er einmal unter der Vierergruppe und nicht viermal einzeln.
Referenz: A-technischer Name mit den Endungen _text, _input, _max, _error, _errormessage, _visible

Schritt 6: Eingegebene Nummer anzeigen

Sinnvoll auf der Bestellübersicht (ws_place_order.htm) und der Bestelleingangsbestätigung (ws_confirm.htm).

Reisepassnummer abfragen

Der Ablauf entspricht dem oben beschriebenen. Es gibt nur ein Feld, und die Prüftypen heißen anders.

Schritt 1: Feld anlegen und Länge festlegen

Setzen Sie die Höchstlänge nicht unter 28. Ab 28 Zeichen behandelt der Shop die Nummer als neuere Bauart. Eine Begrenzung auf 27 schneidet solche Nummern ab, und der Käufer bekommt eine Fehlermeldung, obwohl seine Eingabe richtig war.
Die Sichtbarkeitsregel für PassportNumber1 bauen Sie wie oben, mit einem eigenen <+FieldVisibility>-Block im selben Abschnitt.

Schritt 2: Fehlertexte ergänzen

Schritt 3: Prüfungen festlegen

Für den Reisepass heißt die Altersprüfung agecheckpassport, nicht agecheck. Sie sucht das Geburtsdatum an einer anderen Stelle, nämlich mitten in der Nummer statt an ihrem Anfang.

Schritt 4: Eingabefeld ins Template

Die Anzeige der eingegebenen Nummer funktioniert wie beim Personalausweis, mit {A-PassportNumber1}.

Beides gleichzeitig anbieten

Bieten Sie beide Nummern an, soll der Käufer eine von beiden ausfüllen dürfen, nicht beide. Genau das ist der schwierige Teil, denn die Pflichtfeldprüfungen aus den Abschnitten oben würden sich gegenseitig blockieren. Die Lösung besteht aus Bedingungen: Jede Pflichtfeldprüfung wird an die Bedingung geknüpft, dass die jeweils andere Nummer leer ist.
Trägt der Käufer in beide Nummern etwas ein, werden auch beide geprüft, und beide müssen gültig sein. Er kommt also nicht weiter, solange eine der beiden Nummern fehlerhaft ist, selbst wenn die andere stimmt. Er muss die fehlerhafte Eingabe dann vollständig löschen. Weisen Sie im Formular darauf hin, dass eine Nummer genügt.

Schritt 1: Zusätzlichen Fehlertext anlegen

Schritt 2: Pflichtfeldprüfung des Personalausweises ergänzen

Erweitern Sie die Pflichtfeldprüfung aus dem Personalausweis-Abschnitt um eine zweite Bedingung und tauschen Sie die Fehlerkennung aus.
Mehrere <+Condition>-Blöcke in einer Prüfung wirken zusammen: Die Prüfung läuft nur, wenn alle Bedingungen zutreffen. Die Pflichtfeldprüfung des Reisepasses bekommt spiegelbildlich vier Bedingungen, je eine pro Personalausweisfeld, alle mit Type = empty.

Schritt 3: Angefangene Personalausweiseingabe vollständig einfordern

Hat der Käufer auch nur eines der vier Personalausweisfelder ausgefüllt, sollen alle vier ausgefüllt sein. Dafür brauchen Sie vier weitere Prüfungen, die sich nur im Feld ihrer Bedingung unterscheiden.
Wiederholen Sie diesen Block für IdentityCard2, IdentityCard3 und IdentityCard4 in der Bedingung. Der Rest bleibt jeweils gleich.

Bedingungstypen im Überblick

Type in einem <+Condition>-Block kennt diese Werte:
Ein Type, den der Shop nicht kennt, führt nicht zu einer Fehlermeldung. Er wird stillschweigend wie filled behandelt. Ein Tippfehler an dieser Stelle fällt deshalb erst auf, wenn eine Prüfung im Betrieb anders greift als gedacht.

Verwandte Themen