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. Der Code darf¬† auch gespiegelt gedruckt werden. Das erkennen die Apps oft auch nicht. Zu pr√ľfen ist auch ob die verschiedenen Kodiermethoden korrekt umgesetzt sind (inbesondere ECI ist kritisch).

In der Zwischenzeit können die Kameraapps der verschiedenen Smartphones den QR-Code direkt ohne Zusatzapp lesen. Leider wird der Data Matrix Code, der bei industriellen Anwendungen dominiert, meistens von der Kameraapp nicht gelesen. Es ist nach wie vor eine separate Codeleseapp erforderlich (Stand Jahr 2023). Selbst ambitionierte Hersteller wie Apple sind nicht in der Lage der Kameraapp das Lesen der Data Matrix Codes beizubringen geschweige denn die ISO normierten Datenstrukturen zu interpretieren. 

Das Erkennungsmerkmal der Matrix Codes ist, dass diese in einer Schachbrettform aufgebaut werden. Jedes einzelne Feld beinhaltet eine Information (1 bit nur im Datenbereich). 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 als stehendes oder liegendes Rechteck mit einer Matrix von 2 x 8 bzw. umgekehrt ausgef√ľhrt.

Die typische Platzierungsregel der Codewörter geht von der unteren rechten Codeecke aus. Das ist die Ecke ohne das Suchmusterquadrat. Die Codewörter werden in Spaltenbreiten mit je zwei Matrixzellen von unten rechts nach oben mäanderförmig verteilt. Wenn Codewörter asymetrisch an die festen Muster angrenzen dann wird die Codewortgeometrie angepasst.

Bits, die √ľbrigbleiben weil kein vollst√§ndiges Codewort mehr hinein passt werden mit 0 Werten aufgef√ľllt. Codew√∂rter, die f√ľr Dateninhalt des Code nicht benutzt werden, werden zu F√ľllzeichen. Diese Bits und diese F√ľllzeichen wird ein Scanner nie √ľbertragen. Nach der Platzierung der Codew√∂rter werden erfolgt eine XOR Bitmaskierung (8 Varianten, nur auf die Datenbereiche angewendet). 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 als historische Dokumentg √ľber den Industrieverband AIM 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 (nur ein Quadrat anstelle von drei. Es sind die die Gr√∂√üen M1, M2, M3 und M4 des Micro-QR-Code spezifiziert. Den 2005 QR-Code gibt es in der Version 1 bis 40 (die sich durch die Matrixgr√∂√üen unterscheiden - 21 x 21 bis 177 x 177 in Schritten von 4).

Die Fehlerkorrektur des QR-Codes (Model 2 und 2005) benutzt den Reed Solomon Algorithmus. Mit den Stufen L, M, Q und H wird festgelegt wie viele 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.

QR-Code 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.    
 


QR-Code Fehlerkorrektur M, Positiv und negativ    

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.    
 

QR-Code Finder Pattern

Im nächsten Bild sind die Taktmuster (Timing pattern) rot hervorgehoben. Die grauen Felder zeigen die weißen Module des Taktmusters an. Zwischen dem Taktmuster 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.

Qr-Code timing pattern

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.

QAR-Code Alignment pattern    
 

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.    
 

QR-Code - Format und Version

Die Formatinformation besteht aus 15 bits. Davon sind 5 Datenbits und 10 bits dienen zur Fehlerkorrektur (5,15 BCH System) (Wenn die Formatinformation zerst√∂rt ist kann der Code nicht gelesen werden und deshalb sind die Fehlerkorrekturbits wichtig). 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. Damit soll eine m√∂glichst gleichm√§√üige Verteilung der hellen und dunklen Module erreicht werden.¬†¬†¬†¬†

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. Der ECI Modus 00003 wird daher eher nicht benutzt sondern die anderen f√ľr z.B. Kanji oder kyrillische Schriftzeichen.

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ötigt 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. Wenn es keine Vereinbarung zur Bedeutung der Daten im Bytgemodus gibt sollen die Zeichen gem√§√ü der Norm¬† ISO/IEC 8859-1 interpretiert werden.

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 (der QR-Code wurde von der japanischen Firma Denso entwickelt).

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. Das Bitmuster, das den FNC1 Modus anzeigt, erscheint ¬†als Erstes im Code. In diesem Fall ¬†werden die Daten in der Syntax der Application Identifier gem√§√ü den GS1 General Specifications kodiert. Diese Struktur wird von der GS1 Organisation alleine kontrolliert. Wenn sich das Bitmuster f√ľr den FNC1 Modus sich an der zweiten Stelle befindet, dann soll eine Datenstruktur kodiert werden die durch den AIM Verband festgelegt wird. Ein solche Festlegung existiert aber nicht und daher wird dieser Modus in der Praxis nicht benutzt.¬† Wenn das Bitmuster f√ľr den FNC1 Modus¬† 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. Es dr√ľckt lediglich in einer kurzen Form die Anwendung des QR-Code zusammen mit den Datenstrukturen der GS1 Organisation aus. Im Gegensatz zu einen Data Matrix Code oder Code 128 gibt es im QR-Code kein FNC1 Zeichen. Der FNC1 Modus wird wie oben beschrieben mit einen Bitmuster am Codeanfang angezeigt.¬†

Der Symbolgieidentifikator nach ISO/IEC 15424, der den Datentr√§ger identifiziert beinhaltet einen Modifier f√ľr den FNC1 Modus. Der Symbologieidentifier wird nur vom Dekoderalgorithmus des Scanners generiert und den dekodierten Daten vorangestellt. Wenn das Bitmuster f√ľr den FNC1 Modus vorhanden ist wird ein anderer Symbologieidentifikator generiert als wenn das FNC1 Bitmuster nicht vorhanden ist.¬†

Die präzisere und sicherere  Identifizierung der Datenstruktur ist dem Verfahren gemäß der Norm  ISO/IEC 15434 festgelegt.  Das Format 05 zeigt die Nutzung der Datenstruktur mit den GS1 Application Identifiern an. In der Praxis wird das Format 05 nicht benutzt und GS1 beschreibt in den GS1 General Specifications dieses Verfahren auch nicht.    

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 dort existiert 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. F√ľr einen Strichcode wie den Code 128 sind das zu viele Verwaltungsdaten.

Im Gegensatz zum DataMatrix Code kennt der QR-Code keine Makrocodew√∂rter f√ľr die Formate 05 und 06 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).

Eine weitere Besonderheit sind die Trennzeichen, die Datenfelder trennen wenn die Application Identifier Struktur oder die Data Identifier Struktur benutzt wird. Es gibt kein FNC1 Zeichen in dem QR-Code das dazu benutzt werden könnte (im Gegensatz zu Data Matrix und Code 128) . Die Norm legt daher fest, dass das ASCII Steuerzeichen GS (1Dhex) benutzt werden muss oder das Prozent Zeichen (%). Das Prozentzeichen hat den Vorteil, dass es auch verarbeitet wird, wenn der Scanner in dem Modus einer Tastaturemulation betrieben wird. Wenn tatsächlich das Prozentzeichen gemeint ist (anstelle der Feldtrennfunktion) muss das Prozentzeichen im FNC1 Modus doppelt kodiert werden.

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.