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.