Ein Reisepass, dessen maschinenlesbare Zone jede Prüfziffer besteht, wirkt vertrauenswürdig. Die Rechnung geht auf, der Validator liefert fünfmal true, und der Onboarding-Ablauf geht weiter. Es lohnt sich, genau zu sein, was dieses true bedeutet, denn es verspricht weniger, als es scheint.

Dieser Leitfaden richtet sich an Entwickler, die KYC- und Onboarding-Abläufe bauen. Er sortiert die üblichen Screening-Prüfungen danach, was die Prüfziffern der MRZ erkennen, was sie nicht erkennen können und welche andere Prüfung jede Lücke schließt. Jede Zone unten ist das ICAO-eigene Muster, Anna Maria Eriksson aus „Utopia“, oder eine für diesen Beitrag erfundene Variante davon. Kein echtes Dokument kommt vor.

Dies ist der Blog von doc.cheap, einer OCR-API für Reisepässe und Ausweise. Für alles Folgende brauchen Sie sie nicht.

Wofür die Ziffern da sind

Die MRZ ist der Block aus Großbuchstaben, Ziffern und Füllzeichen < unten auf der Datenseite eines Reisepasses oder auf der Rückseite eines Ausweises. ICAO Doc 9303 gibt ihr Prüfziffern: je eine für die Dokumentnummer, das Geburtsdatum und das Ablaufdatum, eine für die optionale persönliche Nummer bei Reisepässen und eine Gesamtprüfziffer über den größten Teil der unteren Zeile.

Jede Ziffer ist eine gewichtete Summe. Jedes Zeichen wird zu einer Zahl (0–9 stehen für sich selbst, A = 10 bis Z = 35, < = 0), die Zahlen werden mit den sich wiederholenden Gewichten 7, 3, 1 multipliziert, und die Summe modulo 10 ist die Ziffer. So funktionieren die Prüfziffern der MRZ geht das Schritt für Schritt durch, mit einem Validator zum Einfügen.

Die Ziffern wurden entworfen, um Lesefehler zu erkennen. Sie sollten nie Betrug aufdecken, und alles Weitere folgt daraus.

Was eine Prüfziffer erkennt

Eine einzelne falsche Ziffer. Da 7, 3 und 1 keinen gemeinsamen Teiler mit 10 haben, ändert jede Änderung einer Ziffer eines Felds in eine andere Ziffer immer die Summe modulo 10. Eine 3, als 8 gelesen, eine 5, als 6 gelesen: Die Feldprüfziffer passt nicht mehr, und die Gesamtprüfziffer auch nicht.

Die meisten Vertauschungen zweier Nachbarn. Tauschen zwei benachbarte Zeichen die Plätze, ändert sich die Summe um ihre Differenz mal die Differenz ihrer Gewichte (4, 2 oder 6). Das ist nur dann ein Vielfaches von 10, wenn sich die beiden Werte um ein Vielfaches von 5 unterscheiden. 98, als 89 eingetippt, wird also erkannt, während 16, als 61 eingetippt, durchrutscht, ebenso wie 05, als 50 eingetippt.

Schäden, Spiegelungen und Abtippen. Hier verdienen sich die Ziffern ihren Platz. Ein Knick über einem Zeichen, eine Spiegelung auf dem Laminat, ein Mensch, der eine Zone von Hand abtippt: Das verursacht die meisten fehlerhaften MRZ-Daten, und eine fehlgeschlagene Ziffer ist das billige Signal, dass ein Feld falsch gelesen wurde. Die richtige Reaktion ist ein neues Foto, keine Ablehnung.

Wo die Rechnung blind ist

Die Ziffern haben Lücken, selbst bei ehrlichen Fehlern, und ein Screening-Ablauf sollte sie kennen.

Ein Buchstabe, der als Zeichen gelesen wird, dessen Wert sich um 10, 20 oder 30 unterscheidet. Nehmen Sie die Dokumentnummer des Musters, L898902C3, deren Prüfziffer 6 ist. Ersetzen Sie das C (Wert 12) durch eine 2 (Wert 2): Die Summe sinkt um 10 × 3 = 30, von 316 auf 286, und die Ziffer bleibt 6. Die Gesamtprüfziffer, die dieselben Zeichen mit demselben Gewicht abdeckt, besteht ebenfalls. Paare wie B und 1 oder C und 2 können einander ersetzen, ohne dass es auffällt.

Felder, die keine Ziffer abdeckt. Name, ausstellender Staat, Staatsangehörigkeit und Geschlecht liegen außerhalb jeder Feldprüfziffer, und die Gesamtprüfziffer lässt Staatsangehörigkeit und Geschlecht ebenfalls aus. Ein falsch gelesener Name bleibt stumm; nur ein Vergleich mit der gedruckten Seite zeigt ihn.

Was sie überhaupt nicht erkennen kann

Alles in diesem Abschnitt besteht die Prüfziffern der MRZ, und zwar konstruktionsbedingt.

Ein gefälschtes Dokument mit einer in sich stimmigen Zone. Der Algorithmus ist öffentlich und passt in zwanzig Zeilen Code. Wer ein gefälschtes Dokument herstellt, berechnet die Ziffern korrekt, denn eine falsche Ziffer ist der eine Fehler, den jedes Lesegerät gratis erkennt. Eine bestandene Zone sagt, dass die Zone richtig gelesen wurde. Sie sagt nichts darüber, ob das Dokument echt ist.

Von einer echten Person kopierte Daten. Eine Zone, die aus dem echten Namen, Geburtsdatum und der echten Dokumentnummer einer anderen Person gebaut ist, hat gültige Ziffern, weil die Daten echt sind. Ob die Person vor der Kamera diese Person ist, ist eine andere Frage: ein Gesichtsabgleich mit dem Dokumentfoto, eine Lebenderkennung oder ein Abgleich mit der Liste verlorener und gestohlener Dokumente eines Ausstellers, wo Sie Zugriff auf eine solche haben.

Ein abgelaufenes Dokument. Das Ablaufdatum 120415 besteht seine Prüfziffer, und es ist der 15. April 2012. Der Ablauf ist eine Regel über Daten, keine Prüfsumme: Vergleichen Sie das Datum mit dem heutigen. Denken Sie daran, dass YYMMDD kein Jahrhundert enthält, entscheiden Sie es also aus dem Kontext; das Datumsformat YYMMDD zeigt, wie. Der MRZ-Prüfziffernrechner auf dieser Website markiert ein vergangenes Ablaufdatum neben den Ziffern als abgelaufen, sodass Sie beide Antworten nebeneinander sehen.

Ein ausgetauschtes Foto. Die MRZ enthält kein Bild und keinen Bild-Hash. Ein auf der Datenseite ausgetauschtes Foto lässt die Zone unberührt.

Ein geklonter oder veränderter Chip. Bei einem Reisepass mit Chip sind die Datengruppen vom ausstellenden Staat signiert, und die Prüfung dieser Signatur (Passive Authentication, ICAO Doc 9303 Teil 11) ist der Weg, zu erfahren, dass die Daten vom Aussteller stammen. Dafür braucht es ein Auslesen per NFC und die Zertifikate des Ausstellers. Ein Foto der Seite, so gut es auch ist, kann das nicht beantworten. Die MRZ liefert nur den Zugangsschlüssel, mit dem der Chip geöffnet wird.

Die eine Prüfung, die gern ausgelassen wird: Zone gegen Seite

Ein Dokument sagt das meiste zweimal: einmal in der MRZ und einmal in der Sichtzone (VIZ), der gedruckten Seite, die ein Mensch liest. Beide wurden zusammen von einem Aussteller erzeugt, also stimmen sie bei einem echten, unbeschädigten Dokument überein.

Deshalb ist eine Abweichung interessanter als eine fehlgeschlagene Ziffer. Eine fehlgeschlagene Ziffer bedeutet meist ein schlechtes Foto. Bestandene Ziffern neben einem gedruckten Nachnamen, Geburtsdatum oder einer Dokumentnummer, die etwas anderes sagen, bedeuten, dass eine Seite falsch gelesen oder nach dem Druck verändert wurde. So oder so ist es ein Dokument, das sich ein Mensch ansehen sollte.

Der Vergleich muss bewusst gemacht werden. Lesen Sie beide Zonen, normalisieren Sie die gedruckten Werte (Daten in dieselbe Form, Namen auf reine Großbuchstaben reduziert) und vergleichen Sie Feld für Feld. Berücksichtigen Sie die Transliteration: Ein gedrucktes Müller kann in der Zone MUELLER oder MULLER sein, je nach Aussteller. Die Seite zu den MRZ-Formaten zeigt, welche Felder jedes Format enthält und welche sich deshalb vergleichen lassen.

Eine Screening-Reihenfolge, die trägt

  1. Form. Zeilenzahl und Zeilenlänge entscheiden über TD1, TD2 oder TD3. Eine falsche Form ist ein schlechter Lesevorgang.
  2. Prüfziffern. Ein Fehler heißt neu fotografieren, nicht ablehnen.
  3. Zone gegen Seite. Eine Abweichung bei bestandenen Ziffern geht an einen Menschen.
  4. Daten. Ablaufdatum gegen heute; Geburtsdatum gegen Ihre Altersvorgaben.
  5. Identität. Gesichtsabgleich und Lebenderkennung gegen das Dokumentfoto.
  6. Echtheit. Chipprüfung per NFC oder physische Sicherheitsmerkmale, geprüft von einem Dienst, der dafür gebaut ist.

Die Schritte 1 bis 4 sind billig und laufen auf jedem Bild. Die Schritte 5 und 6 sind eigene Produkte, und keine noch so große Menge MRZ-Arithmetik ersetzt sie.

Wo doc.cheap hineinpasst

Die Reisepass-OCR-API von doc.cheap deckt die Schritte 1 bis 4 ab und berichtet ehrlich über den Rest. Ihre Antwort enthält mrz.status: passed, failed oder absent. Bei failed nennt mrz.reason, was nicht aufging, entweder eine Ziffer (Check digit failed for: document number) oder eine Abweichung von der gedruckten Seite (MRZ does not match the visual zone for: surname), denn standardmäßig werden beide Zonen gelesen und verglichen. Die Zone selbst kommt wörtlich in mrz.lines und mrz.text zurück, sodass Sie die Ziffern in Ihrem eigenen Code nachrechnen können. document.expiry_date, document.is_expired und document.days_remaining beantworten Schritt 4.

Es ist ein Erkennungsdienst, kein Verifizierungsdienst. Sein Block authenticity lautet not_checked, statt ein Bestehen anzudeuten, und Foto- und Chipprüfungen bleiben bei den Werkzeugen, die dafür gebaut sind. Um eine Zone ohne Code auszuprobieren, fügen Sie sie in den MRZ-Prüfziffernrechner ein; er läuft im Browser und zeigt jede berechnete Ziffer neben der gedruckten. Wenn Sie einen gehosteten Dienst auswählen, stellt der Vergleich von Reisepass-OCR-APIs die veröffentlichten Preise nebeneinander.

Eine Frage an Sie: Welche dieser Lücken ist Ihrem Onboarding-Ablauf in der Praxis schon begegnet? Schreiben Sie es uns unten in die Kommentare.