-
Notifications
You must be signed in to change notification settings - Fork 38
Link statt QR Code OCR Kette
Spezifikation:
Ist es nicht möglich den maschinenlesbaren Code als QR-Code oder als OCR-Kette auf den Beleg zu drucken, kann eine aufgedruckte URL verwendet werden, die den maschinenlesbaren Code über das HTTP-Protokoll auf einem externen Server zur Verfügung stellt. Die URL kann dabei aus beliebigen Komponenten (Verzeichnissen) bestehen. Die wesentliche Anforderung bezieht sich darauf, dass das letzte Element einem Teil (8 Bytes) des SHA256-Hash-Werts entspricht der über den maschinenlesbaren Code gerechnet wird. Die Notwendigkeit für die Hash-Wert Bildung gibt sich daraus, dass der LINK an den Beleg gebunden sein muss um sicherzustellen, dass der Inhalt des Links nach der Belegerstellung nicht geändert wird.
Dabei wird wie folgt vorgegangen:
- Hashwert-Berechnung: Es wird der SHA-256 Algorithmus auf die UTF-8 Kodierung des maschinenlesbaren Code angewendet. Als Ergebnis erhält man den SHA-256 Hash-Wert mit einer Länge von 32 Bytes (HASH-VALUE-32).
- Extraktion von 8 Bytes: Vom Ergebnis (HASH-VALUE-32) werden die ersten 8 Bytes extrahiert (Bytes 0-15). Das Ergebnis wird in weiterer Folge als HASH-VALUE-8 bezeichnet.
- "Kodierung des Ergebnisses": Die 8 extrahierten Bytes (HASH-VALUE-8) werden BASE64-URL kodiert. Ergebnis: HASH-VALUE-8-BASE64-URL
- "Konstruktion des Links": Das Ergebnis (HASH-VALUE-8-BASE64-URL) wird für die Konstruktion des "Links" verwendet. Die URL wird dabei anhand des folgendens Schemas konstruiert: http(s)://test.example.at/dir1/dir2/.../dirN/HASH-VALUE-8-BASE64-URL. Wobei es aus Platzgründen sinnvoll ist keine oder nur wenige Verzeichnisse zu verwenden. Im Idealfall wäre eine URL die ohne Verzeichnisse auskommt zu verwenden: http(s)://test.example.at/HASH-VALUE-8-BASE64-URL.
Der maschinenlesbare Code muss nun beim Aufrufen des "Links" mit dem HTTP-Befehl "GET" abgerufen werden können. Dabei sind folgende Punkte relevant:
-
HTTP-Header: Es muss der Cotent-Type application/json gesetzt sein.
Content-Type: application/json -
Ergebnis: Es muss das in JSON aufbereitete Ergebnis zurückgegeben werden, wobei der Platzhalter MACHINE-READABLE-CODE mit dem maschinenlesbaren Code (äquivalent zur Darstellung für den QR-Code) ersetzt werden muss.
{ "code": "MACHINE-READABLE-CODE" }
Beispiele: Das spezifizierte Verfahren wird anhand eines Beispiels demonstriert.
-
Maschinenlesbarer Code wie folgt:
_R1-AT0_DEMO-CASH-BOX703_496410_2015-12-17T11:22:26_61,33_15,42_38,26_0,00_42,81_udSL0zTzFaA=_b869153bc32a1c9_TZgOKfzheUs=_d7VoZ/nyr/8Mt2NVBZ0L4ivQwdlE3CmCFmz10bA5NXhGQ1QkunsDTqKvOSy//3nO8WT0+ypQqrDXMvyOGOXl9w== -
Beispiel URLs: Für das Aufbereiten des Links wird von den folgenden zwei Basis-URLs ausgegangen (http/https mit/ohne Verzeichnis).
-
Berechnung des Hash-Werts: Von den 32 Bytes des Ergebnisses der SHA-256 Hashwert-Berechnung über die UTF-8 Kodierung des maschinenlesbaren Codes werden die ersten 8 Bytes extrahiert und BASE64-URL-kodiert. Das Ergebnis für das gegebene Beispiel entspricht dem folgenden Wert:
ikkiOyDQ2Bo -
Erstellen des "Links": Das Ergebnis wird für die beiden Beispiel-URLs wie folgt eingefügt
-
Abrufen des maschinenlesbaren Codes vom "Link": Durch das Ausführen des HTTP GET Befehls auf einen der aufbereiteten Links wird für das im Bespiel verwendeten maschinenlesbaren Code die folgende Antwort gegegen (es wird nur der einzig relevante Header gezeigt, andere typisch verwendete HTTP Header werden aus Gründen der Übersichtlichkeit nicht gezeigt).
HTTP/1.1 200 OK Content-Type: application/json { "code" : "_R1-AT0_DEMO-CASH-BOX703_496410_2015-12-17T11:22:26_61,33_15,42_38,26_0,00_42,81_udSL0zTzFaA=_b869153bc32a1c9_TZgOKfzheUs=_d7VoZ/nyr/8Mt2NVBZ0L4ivQwdlE3CmCFmz10bA5NXhGQ1QkunsDTqKvOSy//3nO8WT0+ypQqrDXMvyOGOXl9w==" }