QR-Code

Der QR-Code Code ist ein 2-dimensionaler Code der aus Codewörtern für Daten und Fehlerkorrektur besteht, sowie feste Strukturen (feste Muster, Fixed Pattern) aufweist die zur Codelagebestimmung und Gitterrekonstruktion bestehen.

Für SmartPhones gibt es viele Apps die den QR-Code Code dekodieren können. Bezüglich der vollständigen Umsetzung des Codes hapert es aber oft. Es fängt mit der ganz einfachen (nach Norm erlaubt und spezifiziert) Negativversion des Codes an (Heller Code auf dunklem Hintergrund) die nicht gelesen werden. Zu prüfen ist auch ob die verschiedenen Kodiermethoden korrekt umgesetzt sind.

Das Erkennungsmerkmal der Matrix Codes ist dass diese in einer Schachbrettform aufgebaut werden. Jedes einzelne Feld beinhaltet eine Information. Da beim QR-Code jedes Feld (bzw. Matrixzelle oder  Modul) entweder hell oder dunkel sein kann, kann in einer Zelle ein Bit kodiert werden. Ein Bit kann den Wert 0 oder 1 aufweisen. Es werden immer 8 dieser Matrixzellen zusammengefasst. Diese Zusammenfassung ist ein Codewort. Da eine Matrixzelle ein Bit umfasst sind 8 Zellen 8 bit. Mit 8 bit lassen sich die Zahlenwerte von 0 bis 255 kodieren.

Ein Codewort in einem QR-Code ist typischer weise eine stehendes oder liegendes Rechteck mit einer Matrix von 2 x 8 bzw. umgekehrt.

Die typische Plazierungsregel der Codewörter geht von der unteren rechten Codeecke aus. Die Codewöter werden in Spaltenbreiten mit je zwei Matrixzellen von unten rechts nach oben mäanderformig verteilt. Wenn Codewörter asymetrisch an die festen Muster angrenzen dann wird die Codewortgeometrie angepasst.

Bits, die übrigbleiben weil kein vollständiges Codewort mehr hereinpasst werden mit 0 Werten aufgefüllt. Codewörter die vom Inhalt des Code nicht ausgefüllt werden werden zu Füllzeichen. Diese Bits und diese Füllzeichen wird ein Scanner nie übertragen. Nach der Plazierung der Codewörter werden erfolgt eine XOR Bitmaskierung. Dieser Schritt wird vorgenommen um eine möglichst homogene Verteilung der schwarzen und weißen Module zu erreichen. 

Des QR-Code gibt es in der Model 1, Model 2 und 2005 Version. Model 1 ist veraltet und nur noch rudimentär in der Norm ISO/IEC 18004 beschrieben (Die vollständige Model 1 Spezifikation AIM ISS 97 ist nicht mehr offiziell verfügbar). Die aktuelle Version ist 2005. Die Version 2005 hat gegenüber der Model 2 Version einige Ergänzungen. Dabei handelt es sich um Symbolverkettungen (structured Append), ECI Dateninterpretation, negative (reflectance reversal) und gespiegelte Symbole. Der Micro QR-Code ist eine verkleinerte Version bei dem auf Suchmuster verzichtet wird. Es sind die die größen M1, M2, M3 und M4 des MicroQR-Code spezifiziert. Den 2005 QR-Code gibt es in der Version 1 bis 40 (die sich durch die Matrixgrößen unterscheiden).

Die Fehlerkorrektur des QR-Codes (Model 2 und 2005) benutzt den Reed Solomon Algorithmus. Mit den Stufen L, M, Q und H wird festgelegt wieviele Codewörter zur Fehlerkorrektur benutzt werden. In der L Version sind es 7%, M 15%, Q 25% und H 30%. Der Mirco QR-Code unterstützt die Stufe H nicht. Aufgrund der variablen Fehlerkorrektureinstellung ist in der Norm ISO/IEC 18004 eine Tabelle (Tabelle 9) vorhanden die für jede Version die Anzahl der Codewörter auflistet. Pro Version und pro Fehlerkorrekturstufe gibt die Tabellen dann die Anzahl der Codewörter für die Fehlerkorrektur an.

Das folgende Bild zeigt einen QR-Code in der Fehlerkorrekturstufe H.


Die beiden folgenden Bilder zeigen den QR-Code in der Fehlerkorrekturstufe M. Die Matrix wird dadurch bei gleichem Codeinhalt kleiner. Die geht auf Kosten der Fehlertoleranz. Abgesehen von der positiven und negativen Darstellung sind beide Codes identisch.

 

 

 

 

Die festen Muster unterteilen sich in verschiedene Bereiche. Es gibt das Suchmuster (Finder), das Taktmuster (Timing), die Justagemuster (Alignment).  Die Ruhezonen des QR-Codes sind asymetrisch. Im Bereich der Suchmuster wird eine Ruhezone von 4 Modulen benötigt.  In der Praxis sieht man häufig Symbole mit nur einer Modulbreite als Ruhezone.

Das folgende Bild zeigt rot hervorgehoben die Suchmuster. Die Suchmuster werden zur Lagebestimmung und zur grundsätzlichen Symbollokalisierung benutzt.
 

Im nächsten Bild sind die Taktmuster (Timing pattern) rot hervorgehoben. Die grauen Felder zeigen die weißen Module des Taktmusters an. Zwischen dem Takmuster ist in diesem Fall je ein Justiermuster angeordnet. Wenn das Symbol kleiner wird entfallen diese Muster. Wenn das Symbol größer liegen mehr Justiermuster im Taktmuster. Die Taktmuster zeigt die Matrixzellengröße an. Da es ein Muster in X- und Y-Richtung ist und sichergestellt ist dass immer eine Abfolge von genau einer Matrixzelle in dunkel und heller Sequenz vorhanden ist wird damit die Gitterrekonstruktion erleichtert.

Im nächsten Bild sind die Justagemuster (Aligmnent Pattern) rot hervorgehoben. Die Anzahl der Justagemuster variiert je nach Codegröße. Die Justagemuster erlauben eine Erkennung einer Symbolverzerrung.

Bei allen Mustern ist zu beachten dass normale Scanner den Code nie im 90° Winkel einlesen. Sobald eine Bildaufnahme in einem anderen Winkel erfolgt erscheint der Code im Bild verzerrt. Die Dekodersoftware muss diese Verzerrung mit Hilfe der Suchmuster, Taktmuster und Justagemuster erkennen und kompensieren.

Als Besonderheit weist der QR-Code noch eine Format- und Versionsinformation auf.  Das linke Bild zeigt die Formatinformation hervorgehoben und das rechte Bild die Versionsinformation.
 

Die Formatinformation besteht auf 15 bits bestehend aus 5 Datenbits und 10 bits zur Fehlerkorrektur (5,15 BCH System). Dier ersten beiden Datenbits zeigen an welcher Fehlerkorrekturstufe benutzt wurde. Die verbleibenden 3 bits zeigen das benutzte Muster zur Datenmaskierung an. Die Datenmaskierung legt über das Symbol eine bestimmte Maske über die eine logische XOR Operation ausgeführt wird um eine möglichst gleichmäßige Verteilung der Module zu erreichen.

Die Versionsinformation gibt nur ab der Version 7 des QR-Codes. Es besteht aus 6 Datenbits und 12 Fehlerkorrekturbits. Aus Redundanzgründen ist die Versionsinformation doppelt im Code vorhanden. Die Versionsinformation zeigt die Matrixgröße an. Version 1 ist 21x21 Matrixzellen groß. Version 2 addiert in jede Achse 4 Matrixzellen. Damit ist die Matrix für Version 2 25x25 Zellen groß. Die Maximale Größe ist Version 40 mit 177 x 177 Modulen. 
Die Matrixgröße berechnet sich wie folgt : (Versionsnummer - 1) * 4 + 21. Für die Version 7 ist die Matrix dann 6 x 24 + 21 = 45  (also 45 x 45)

Der QR-Code kennt wie der DataMatrix Code verschiedenene Kodierschemata.

Im ECI Mode wird die voreingestellte Interpretation 000003 benutzt die den ISO/IEC 8859-1 Zeichensatz repräsentiert.

Im numerischen Modus können die Ziffern 0 bis 9 kodiert werden. 3 Ziffern können in 10 bit kodiert werden bzw. 1 Ziffer benötgt 3,33 bits.
Der alphanumerische Modus ist bezüglich der Zeichensatzauswahl beschränkt. Es stehen lediglich 45 Zeichen zur Auswahl.  Es handelt sich dabei um die Ziffern 0 bis 9 udn die 26 Großbuchstaben von A bis Z. Dazu kommt das Leerzeichen, , $, %, *, +, -, .,/, :) Meistens werden für zwei Zeichen 11 bits benötigt.  Die häufig anzutreffende URL Kodierung verwendet meistens Kleinbuchstaben und daher werden URL's im Byte Modus kodiert.
Im Byte modus werden 8 Bits pro Zeichen benutzt. Der Byte Modus kann beliebige Daten kodieren. Es bedarf daher einer Vereinbarung über die Bedeutung der Daten. Die Vorgabe der Norm ist die Interpretation nach ISO/IEC 8859-1.

Im Kanji Modus werden die japanischen Zeichen kodiert. Dies ist eine Besonderheit des QR-Codes. Andere Codearten können das nur im Byte oder ECI Modus. Es wird nach JIS X 0208 gearbeitet. Die 16bit Zeichen werden in den Code mit einem Platzbedarf von 13bit komprimiert kodiert.

Im Structured Append Modus werden mehrere Symbole miteinander verkettet. Damit kann eine große Datenmenge kodiert werden. Der Nachteil ist, dass jedes Symbol einzeln gelesen werden muss und die Daten nacher wieder zusammengefügt werden müssen. In jedem Symbol ist die Symbolnummer und die Anzahl der Symbole  in der Kette kodiert.

Im FNC1 Modus werden die Daten nach festgelegten Strukturvorgaben kodiert. Wenn das FNC1 1 sich an erster Stelle befindet werden die Application Identifier gemäß ANS MH10.8.2 kodiert. Diese Struktur wird von der GS1 Organisation alleine kontrolliert. Wenn sich das FNC1 an der zweiten Stelle befindet dann wird eine Datenstruktur kodiert die durch den AIM Verband festgelegt wird. Wenn das FNC1 Zeichen an der ersten Stelle kodiert wurde, dann nennt die GS1 Organisation das Ergebnis GS1 QR-Code. Die Bezeichnung GS1 QR-Code kann den Eindruck hervorrufen dass der GS1 QR-Code eine andere Codeart ist als der QR-Code. Das ist nicht der Fall sondern es drückt lediglich in einer kurzen Form die Anwendung des QR-Code mit den Datenstrukturen der GS1 Organisation aus.
Aus hierarchischer Daten- und Datenträgersicht ist hier auch in den Normen unsauber gearbeitet worden. Der Symbolgieidentifikator nach ISO/IEC 15424 der den Datenträger identifiziert beinhaltet einen Modifier für das FNC1 Zeichen an der ersten Position. Korrekterweise dürfte das dort nicht erscheinen sondern die Identifizierung der Datenstruktur müsste in der ISO/IEC 15434 festlegt werden. Tatsächlich findet man in dieser Norm das Format 05 für die Datenstruktur mit Application Identifiern. Es wird lediglich nie benutzt.

Eingeführt wurde die Systematik, zur Erkennung der GS1 Datenstruktur, mit dem FNC1 Zeichen bei dem Code 128. Bei dem Code 128 ist dies eine technisch sehr sinnvolle Lösung, da das FNC1 Zeichen in allen drei Zeichensätzen des Code 128 die gleiche Bedeutung hat. Dadurch bleibt der Code mit den GS1 Strukturierten Daten möglichst kurz. Die formal bessere Alternative mit dem Format 05 nach ISO/IEC 15434 würde anstelle von einem Zeichen (FNC1) die Kodierung von 8 Zeichen erzwingen.

Im Gegensatz zum DataMatrix Code kennt der QR-Code keine Makrocodewörter für die Formate 05 und 05 nach ISO/IEC 15434. Daher müssen die ISO/IEC 15434 Formate mit jeweils 6 Zeichen als Präfix und 2 Zeichen als Suffix kodiert werden ( Das Makrocodewort würde die 8 Zeichen durch ein Zeichen ersetzen).
 

 

Steckbrief:
Kleinste Matrix 11 x 11, Größe Matrix 17 x 17 (Micro QR-Code)
Kleinste Matrix 21 x 21
Größte Matrix 177 x 177, 1817 Kanjizeichen, 2953 Bytes, 4296 a/n Zeichen, 7089 Ziffern
Keine Rechteckmatrix

Es ist eine asymmetrische Ruhezone von 4 Modulen im Bereich des Suchmusters erforderlich
Die ECC200 Fehlerkorrektur nach Reed Solomon gibt es in den vier Stufen L (7%), M (15%), Q(25%), H(30%) (Anzahl der wiederherstellbaren Codewörter in bezogen auf die Gesamtanzahl der Codewörter)

Inverse und spiegelbildliche Symbole sind erlaubt, Leserichtung Omnidirektional.

Mehrere Symbole können verkettet werden
Die alte Modell 1 Version soll nicht mehr benutzt werden.
Aus der  Model 2 version wurde die 2005 Version. Diese ergänzte u.a. die inversen und spiegelbildlichen Symbole.