Grundsätzlich sind die Daten in QR Codes nach dem Schema in Abbildung 1 angeordnet. Der Mode Indicator ist eine Referenz auf den verwendeten Zeichensatz (siehe Modus weiter unten). Der CCI (Character Count Identifier) enthält die Anzahl der Zeichen, die in dem Modus encodiert wurden.
Abb. 1: Schema mit Informationen in QR Code Symbolen
Die Daten enthalten die eigentliche Nachricht. Sie werden von einem Terminator (Bitsequenz: 0000), ähnlich dem "\0" Zeichen in C, abgeschlossen.
Wenn die Nachricht das letzte Codewort nicht komplett ausfüllt, wird dieses mit Füllbits (lauter 0en) aufgefüllt.
Sollten die Nachricht nicht alle Datencodewörter des QR Code Symbols verwenden, müssen die verbleibenden Codewörter mit Zufallsdaten gefüllt werden. Dabei ist die Anordnung der verwendeten Bitfolge irrelevant. Es ist jedoch wünschenswert das genauso viele helle, wie dunkle Zufallsmodule verwendet werden, damit die Anzahl der Strafpunkte beim Masking gering bleibt. Für alle diese Informationen (Mode Indicator, CCI, Daten, Terminator, Füllbits und Zufallsdaten) werden Fehlerkorrekturdaten berechnet und angehängt.
Zusätzlich gibt es noch Metainformation über das QR Code Symbol in Form von Format- und Versionsinformationen. Diese werden im Folgenden noch genauer erklärt.
Die Formatinformationen bestehen aus einer Sequenz von 15 Modulen, dabei werden 5 Module für das Format und 10 für die Fehlerkorrektur verwendet. Das Format wiederum besteht aus 2 Modulen für das Fehlerkorrektur Niveau (siehe Fehlerkorrektur ) und 3 Modulen für die Mask Pattern Referenz (siehe Masking ).
Diese Modulsequenz wird mit der festgelegten XOR-Maske 101010000010010 verknüpft.
Ein Beispiel soll dies verdeutlichen.
Wenn die Formatinformationen nicht ausgelesen werden können, kann das QR Code Symbol nicht decodiert werden. Deswegen werden diese Daten doppelt redundant im QR Code hinterlegt.
Die Versionsinformationen bestehen aus einer Sequenz von 18 Modulen, dabei werden 6 Module für die Version und 10 für die Fehlerkorrektur verwendet.
Es gibt insgesamt 40 unterschiedliche QR Code Versionen. Es fängt mit Version 1 (21 * 21 Module) an und geht bis Version 40 mit 177 * 177 Modulen. Pro Version wächst die Dimension um 4 Module in die Länge und in die Breite.
Die Versionsinformationen werden nur für Symbole mit einer Version > 6 hinterlegt. Für QR Codes mit Version 1-6 wird die Version mit folgender Formel berechnet: .
Ein Beispiel soll die Berechnung der Versionsinformationen verdeutlichen.
Auch die Versionsinformationen werden doppelt redundant gespeichert.
Tab. 1: Versionen und ihre Kapazitäten (Auszug aus [ISO] S. 28-32)
Der Modus gibt die Interpretationsregeln für die Daten an, ist also indirekt der Zeichensatz des QR Code.
Insgesamt sind 4 Modi im QR Code Standard definiert.
Diese können über den in Tabelle 2 abgebildeten Indicator referenziert werden.
Mode | Indicator |
---|---|
ECI | 0111 |
Numeric | 0001 |
Alphanumeric | 0010 |
... | |
Terminator (End of Message) | 0000 |
Tab. 2: Mode Indicator Tabelle (Auszug aus [ISO] S. 18)
Zusätzlich zu den Modi sind in dieser Tabelle auch andere Steuerzeichen enthalten. Dazu gehört der schon erwähnte Terminator und der ECI (Extended Channel Interpretation). Letzterer leitet einen Wechsel des Modus ein. Es ist möglich mehrere Modi in einem QR Code Symbol zu verwenden, um die Daten effizienter abzuspeichern. Dazu wird der bisherige Modus mit dem ECI verlassen und ein neuer Modus wird durch seinen Indicator eingeleitet.
In dieser Arbeit werden wir uns nur mit dem Numeric Mode befassen, der auch im Detail erklärt wird.
Im Numeric Mode können ausschließlich Ziffern (0-9) encodiert werden. Dafür wird die zu verarbeitende Ziffernfolge in Blöcke der Länge 3 zerlegt. Diese Blöcke werden wiederum als Zahlen interpretiert.
Mit 3 Ziffern können die Zahlen von 0 - 999 repräsentiert werden, sie belegen 10 Bits. Eine Ausnahme können die letzen 1-2 Ziffern sein. Aus Effizienzgründen können sie in 7 statt 10 Bits abgelegt werden.
Ein Beispiel soll dies verdeutlichen: