Wie QR-Codes funktionieren
Ich habe versucht, diesen Artikel so aufzubauen, dass er kein Vorwissen verlangt, aber auch keine wichtigen Details auslässt. Wir schauen uns dabei einen konkreten QR-Code an, der "https://qrboat.app/how-qr-codes-work" mit Fehlerkorrekturstufe H kodiert. Jede Abbildung und jede Zahl hier ist daraus berechnet. Alle Regeln und Konstanten sind gegen die Spezifikation ISO/IEC 18004 geprüft.
Aufbau
Ein QR-Code ist ein Raster aus dunklen und hellen Quadraten, den Modulen. Das Raster als Ganzes heißt Symbol und jedes Modul darin steht nach einer Regel an seinem Platz.
Weniger als ein Viertel dieses Pixelhaufens sind deine Daten. Funktionsmuster und Formatinformation hängen allein von der Version ab und sind deshalb in jedem Symbol dieser Größe identisch. Der Rest ist der Datenbereich. Den teilen sich vier Dinge. Die Nachricht ist die Nutzlast mit ihren Moduskopfdaten und dem Abschlusszeichen des Bitstroms. Die Fehlerkorrektur sind Prüfcodewörter. Wie viele es sind, legt die Stufe fest, unabhängig von der Nachricht. Deshalb ist eine kurze Nachricht in einem großen Symbol vor allem Füllung: zwei Bytes im Wechsel, bis die Kapazität voll ist. Der Rest sind die wenigen Module hinter dem letzten Codewort, weil der Datenbereich nicht immer in ganze Codewörter zu acht Modulen aufgeht. Sie werden wie alle anderen gesetzt und maskiert und tragen nichts.
- Nachricht 304 22%
- Füllung 64 5%
- Fehlerkorrektur 704 51%
- Rest 7 1%
Symbole gibt es in 40 Größen, Version 1 bis 40. Die drei Suchmuster kosten in jeder davon gleich viel; also je größer das Symbol, desto kleiner ihr Anteil daran. Ausrichtungsmuster kommen ab Version 2 in einem sich weitenden Raster hinzu, Versionsinformation ab Version 7.
Die Mathematik
Ein Symbol der Version ist Module breit, die 40 Versionen laufen also von 21 bis 177 Modulen je Seite oder von 441 bis 31.329 Modulen insgesamt. Aus der Breite ergibt sich die Version wieder. Darum wird sie erst ab Version 7 ausgeschrieben: Dort kostet es mehr, sich zu verzählen, als die 36 Module kosten.
Ab Version 2 sitzen die Mittelpunkte der Ausrichtungsmuster auf den Positionen entlang jeder Achse. Jedes Positionspaar trägt ein Muster außer den dreien an den Ecken mit den Suchmustern, ein Symbol hat also davon: 1 bei Version 5 und 46 bei Version 40.
| Version | Module | Funktionsmodule | Anteil |
|---|---|---|---|
| 1 | 441 | 233 | 53% |
| 5 | 1.369 | 290 | 21% |
| 40 | 31.329 | 1.681 | 5% |
Den Code finden
Ein Scanner sucht das Symbol, bevor er die Version, den Winkel oder die Modulgröße kennt. Er durchsucht das Bild nach einem einzigen Verhältnis. Eine Linie, die ein Suchmuster durch dessen Mitte kreuzt, läuft über fünf ununterbrochene Strecken (dunkel, hell, dunkel, hell, dunkel) im Verhältnis 1:1:3:1:1. Drehen oder Skalieren des Musters multipliziert alle fünf Strecken mit demselben Faktor, das Verhältnis bleibt also erhalten. Das gilt auch für eine Neigung: Aus der Entfernung liegt das ganze Symbol auf nahezu einer Tiefe, sodass das Suchmuster etwa gleichmäßig gestaucht wird und das Verhältnis intakt bleibt; aus der Nähe, wo die perspektivische Verzerrung und die Linsenverzerrung stärker sind, kann sich das Verhältnis über die Toleranz eines Scanners hinaus verschieben. Drei Treffer in den richtigen relativen Positionen legen drei Ecken des Symbols und seine Drehung fest.
Ein Scanner sucht nach dem Verhältnis, weshalb ein Suchmuster als abgerundetes Quadrat, als Kreis oder aus mehreren Teilen aufgebaut vorhanden sein kann: Eine Linie durch die Mitte läuft weiterhin über die fünf Strecken im selben Verhältnis. Die Spezifikation schreibt ein quadratisches Suchmuster vor; die anderen Formen funktionieren nur, weil Scanner sie tolerieren, und nur solange die Mittellinie intakt bleibt. Eine helle Lücke quer durch die Mitte teilt die mittlere Strecke in zwei: Aus fünf Strecken werden sieben und nichts passt mehr auf 1:1:3:1:1.
Drei Suchmuster geben einem Scanner nur eine Position, eine Drehung und einen Maßstab. Den Modulabstand liefern die Taktmuster: eine Linie aus abwechselnd dunklen und hellen Modulen zwischen den Suchmustern, die der Scanner zählt, statt Abstände gegen eine Modulgröße zu messen, die er raten müsste. Die Ausrichtungsmuster sind bekannte Punkte im Inneren des Symbols. Ein Scanner kann damit die Perspektive korrigieren, die ein Foto mit sich bringt. Außerhalb des Symbols liegt die Ruhezone, ein leerer Rand mit einer Breite von vier Modulen auf jeder Seite, damit irgendwelche Druckmotive neben dem Code nicht für Module gehalten werden. Vier Module sind eine harte Vorgabe der Spezifikation, Scanner kommen aber mit weniger aus.
Zwei Abweichungen bleiben: Ein Symbol kann hell auf dunkel gedruckt und/oder gespiegelt sein. Die Spezifikation führt beide als optional und hat in ihrem Dekodierverfahren für jedes einen Schritt.
Hell auf dunkel gedruckt, tauscht jedes Modul seine Farbe und die Ruhezone wechselt mit: Der Rand ist der nach außen fortgesetzte Hintergrund des Symbols, er geht also mit den hellen Modulen. Wie herum es liegt, ermittelt ein Scanner an einem Suchmuster, dessen Färbung er bereits kennt. Die mittlere Dreierstrecke ist in einem gewöhnlichen Symbol dunkel, eine helle bedeutet also, dass das Bild invertiert und jedes Modul darin andersherum zu lesen ist.
Ein Code, der zum Beispiel von hinten durch Glas fotografiert wird, kommt gespiegelt an. Um welche Achse gespiegelt wurde, macht keinen Unterschied: Ein Quadrat hat vier Spiegelbilder und jedes ist eine Drehung der anderen. Ein Scanner, der Drehung ohnehin ignoriert, hat also genau einen Fall zu behandeln: das Symbol mit vertauschten Zeilen und Spalten.
Jedes Funktionsmuster ist symmetrisch zu dieser Diagonalen, ein transponiertes Symbol sieht also weiterhin wohlgeformt aus. Nur die Daten und die Formatinformation wandern. Die Formatinformation entscheidet es: Ein Scanner liest die 15 Bit und versucht sie zu korrigieren. Lässt sich keine der beiden Kopien auf ein Wort korrigieren, das der Code erzeugen kann, vertauscht er Zeilen und Spalten und liest erneut.
Scanner müssen keines von beiden unterstützen. Unser Tester nutzt rxing, das ein gespiegeltes Symbol ohne jeden Hinweis und ohne zusätzlichen Aufwand liest und ein invertiertes ablehnt, bis man ihm sagt, es mit invertiertem Bild zu versuchen. Spiegelung kostet diesen Dekoder nichts, hell auf dunkel kostet ihn einen Hinweis, den nicht jeder Scanner gibt.
Die Mathematik
Das Suchmuster besteht aus drei konzentrischen Quadraten um einen Mittelpunkt. Eine Linie durch diesen Mittelpunkt im Winkel trifft ein Quadrat der halben Breite im Abstand . Der Faktor hängt allein von ab und nicht von , jede Strecke entlang der Linie wird also um denselben Betrag gedehnt und das Verhältnis der fünf bleibt erhalten. Bei ist er , etwa 1,41: Die Strecken messen 1,41, 1,41, 4,24, 1,41 und 1,41 Module.
Transponiert und gelesen, als läge es aufrecht, landen die beiden Formatkopien dieses Symbols 4 und 5 Bit vom nächstgelegenen Wort entfernt, das der (15, 5)-Code erzeugen kann. Er korrigiert drei, beide scheitern also.
Kodierung
Der Inhalt wird zu Bits, bevor er platziert wird, und was ein Zeichen kostet, hängt davon ab, in welchem der vier Modi es geschrieben ist. Weniger Bits können ein kleineres Symbol bedeuten, ein Kodierer wählt also den günstigsten Modus, den der Inhalt zulässt.
- Numerisch 0 bis 9 3 Zeichen in 10 Bit
- Alphanumerisch 0 bis 9, A bis Z, Leerzeichen und $ % * + - . / : 2 Zeichen in 11 Bit
- Byte jedes Byte, also jeden Text, sofern er als UTF-8 kodiert ist 1 Zeichen in 8 Bit
- Kanji den Doppelbyte-Bereich von Shift JIS 1 Zeichen in 13 Bit
Jedes Segment beginnt mit vier Bit, die seinen Modus benennen: 0001 numerisch, 0010 alphanumerisch, 0100 byte, 1000 kanji. Ein Scanner liest sie als Erstes im Segment, denn sie legen die Breite des folgenden Zeichenanzahlfelds fest.
Die Adresse dieser Seite, 36 Zeichen in Kleinschreibung, braucht Version 3. In Großbuchstaben passen dieselben 36 Zeichen in Version 2, weil Großbuchstaben im alphanumerischen Zeichensatz stehen und Kleinbuchstaben nicht. Schema und Host einer URL unterscheiden Groß- und Kleinschreibung nicht, sie großzuschreiben kostet also nichts. Ein Pfad unterscheidet sie: Ihn großzuschreiben zeigt auf etwas anderes.
Beide Symbole oben stehen auf Fehlerkorrekturstufe M und das durchgehende Beispiel steht auf Stufe H. Deshalb ergibt dieselbe Adresse anderswo auf der Seite ein größeres Symbol.
Die Bits bilden einen Strom. Im Byte-Modus beginnt er mit einem vier Bit langen Moduskennzeichner, dann folgt die Zeichenanzahl in acht Bit, dann ein Byte je Zeichen. Bis zu vier Nullbit schließen die Nachricht ab, weniger, wenn das Symbol fast voll ist. Danach wird der Strom auf eine ganze Zahl von Codewörtern aufgefüllt, der Acht-Bit-Einheit, in der jeder spätere Schritt arbeitet. Dieses Symbol fasst 46 Datencodewörter: Die Adresse und ihre Kopfdaten nehmen 38 und die verbleibenden 8 sind zwei feste Füllcodewörter im Wechsel. Eine kurze Nachricht endet deshalb mit einem sichtbar wiederkehrenden Muster.
Der voreingestellte Zeichensatz des Byte-Modus ist Latin-1, das westeuropäische Sprachen abdeckt und sonst nichts. Verlässt der Inhalt also ASCII, benennt der Kodierer UTF-8, statt einen Scanner die Voreinstellung annehmen zu lassen: ein ECI-Kopf, 12 Bit, die Zuweisung 26 benennen, vor dem ersten Segment. Zeichen kosten dann das, was UTF-8 für sie berechnet: Ein Buchstabe mit Umlaut kostet zwei Byte und ein Emoji vier, gegenüber einem für ein ASCII-Zeichen.
Die Mathematik
Zehn Bit fassen drei Ziffern, weil , also Bit je Ziffer. Elf fassen zwei alphanumerische Zeichen, weil , also je . Die 13 Bit des Kanji-Modus schlagen die 16, die dasselbe Zeichen als zwei Byte kostet.
Der Strom dieses Symbols ist Bit lang, plus Endezeichen, was auf 38 Codewörter aufrundet.
Kapazität ist das, was die Datencodewörter fassen, nachdem die Kopfdaten bezahlt sind. Deshalb tragen die 46 Datencodewörter hier 44 Byte statt 46, von denen diese Adresse 36 nutzt. Version 40, die größte, fasst je Stufe:
| Stufe | Ziffern | Alphanumerisch | Byte | Kanji |
|---|---|---|---|---|
| L | 7.089 | 4.296 | 2.953 | 1.817 |
| M | 5.596 | 3.391 | 2.331 | 1.435 |
| Q | 3.993 | 2.420 | 1.663 | 1.024 |
| H | 3.057 | 1.852 | 1.273 | 784 |
Ein Symbol muss nicht in einem Modus geschrieben sein. Der Strom ist eine Folge von Segmenten, jedes mit eigenem Moduskennzeichner und eigener Zeichenanzahl. Ein Scanner wechselt den Modus beim Lesen. Der günstigste Weg, gemischten Inhalt zu schreiben, ist also meist eine Mischung und die Ziffern in einem Link lassen sich günstiger als Text kodieren.
Jedes Segment kostet vier Bit Kennzeichner plus sein Feld für die Zeichenanzahl, eine kurze Folge bleibt also billiger, wo sie ist. Auch deshalb fallen die Grenzen nicht dorthin, wo das Auge sie setzen würde: Der Schrägstrich vor der Referenz kommt in den alphanumerischen Lauf, weil ein Schrägstrich in diesem Zeichensatz steht und es nichts kostet, ihn dorthin zu verschieben.
Der Kodierer hinter dieser Seite wählt einen Modus für die gesamte Zeichenkette. Die Aufteilung oben ist getrennt berechnet und gegen eine vollständige Suche geprüft.
Die Mathematik
Ein Segment aus Zeichen kostet Bit: vier Bit Moduskennzeichner, dann das Feld für die Zeichenanzahl , dann Bit je Zeichen. Aufgerundet wird an der Segmentgrenze, der einzigen Stelle, an der sich der Strom auf ein ganzes Bit ausrichtet, die laufenden Kosten werden also in Sechsteln eines Bit geführt und nur dort gerundet.
Eine gierige Aufteilung funktioniert nicht, denn ob ein Lauf sein eigenes Segment verdient, hängt von einem Kopf ab, dessen Breite von der Version abhängt. Die Aufteilung ist also ein dynamisches Programm über Positionen und Modi: ist die geringste Bitzahl für die ersten Zeichen mit Ende im Modus . Es gilt .
Breiten des Zeichenanzahlfelds, ISO/IEC 18004 Tabelle 3. Die Breite koppelt die beiden Suchen: Sie hängt von der Version ab, die Version von der Gesamtzahl, die Gesamtzahl von der Aufteilung. Innerhalb eines Bandes kann sich die Aufteilung nicht ändern, sie wird also einmal je Band berechnet und die Versionssuche läuft darin.
| Modus | 1 bis 9 | 10 bis 26 | 27 bis 40 |
|---|---|---|---|
| Numerisch | 10 | 12 | 14 |
| Alphanumerisch | 9 | 11 | 13 |
| Byte | 8 | 16 | 16 |
| Kanji | 8 | 10 | 12 |
Fehlerkorrektur
Ein beschädigtes Symbol lässt sich noch lesen, weil der größte Teil davon nicht die Nachricht ist. Das Symbol, das diese Seite durcharbeitet, Version 5 bei Fehlerkorrekturstufe H, enthält 134 Codewörter: 46 sind Daten, die Nachricht mit ihrer Füllung, die anderen 88 sind daraus berechnete Reed-Solomon-Parität. Ein Scanner rekonstruiert die Codewörter, die er nicht lesen konnte, aus den übrigen.
Eine Prüfsumme sagt nur, dass etwas falsch ist. Die Parität sagt, welcher Teil. Der Kodierer behandelt die Datencodewörter als Koeffizienten eines Polynoms und wählt die Parität so, dass Daten und Parität zusammen genau durch ein festes Generatorpolynom teilbar sind. Ein Scanner teilt, was er empfangen hat: kein Rest heißt, der Block ist unversehrt. Gibt es einen, liefert seine Auflösung, welche Codewörter falsch sind und welche Werte sie hätten haben sollen.
Ein falsches Codewort zu orten und zu korrigieren kostet zwei Paritätscodewörter, eines zum Finden und eines zum Berichtigen. Ein Scanner, der bereits weiß, welches Codewort er nicht lesen konnte, braucht nur eines.
Derselbe Algorithmus läuft auf jedem Block einzeln. Die 134 Codewörter unseres Beispiels werden in 4 Blöcke geteilt, je 11 oder 12 Datencodewörter und 22 Paritätscodewörter. Jeder Block wird für sich korrigiert, bis zu 11 falsche Codewörter darin, gleich was die anderen Blöcke enthalten. Hat ein Block mehr als 11, dekodiert das Symbol nicht.
Die Blöcke sind ungleich, weil die Datencodewörter nicht durch 4 teilbar sind. Die Spezifikation stellt die kurzen nach vorne.
Wie viel Parität ein Symbol trägt, wird vor jeder Kodierung entschieden. Es gibt vier Stufen und eine höhere tauscht Kapazität gegen Toleranz, in einem Symbol von exakt derselben Größe.
Die 7, 15, 25 und 30 Prozent, die für die vier Stufen üblicherweise genannt werden, sind Nennwerte. Die Anteile in der Tabelle sind an dieser Version gemessen und beziehen sich auf die 134 Codewörter, nicht auf die bedruckte Fläche.
Die Mathematik
Ein Codewort ist ein Element des Körpers : ein Byte, mit XOR als Addition und Multiplikation modulo . Ein Block aus Datencodewörtern ist die Koeffizientenliste eines Polynoms und das Generatorpolynom für Paritätscodewörter ist , mit . Die Parität ist der Rest von geteilt durch , der vollständige Block ist also durch teilbar.
Ein Dekoder wertet den empfangenen Block an bis aus. Lauter Nullen heißt: keine Fehler. Sonst orten und korrigieren Paritätscodewörter Fehler an unbekannten Stellen oder füllen Auslöschungen an bekannten. Hier ist gleich 11 oder 12 und gleich 22, also ist gleich 11.
Block 1 dieses Symbols, von den Modulen abgelesen. Das erste Datencodewort, 0x42, ist der Moduskennzeichner und die obere Hälfte der Zeichenanzahl.
| Daten | 42 46 87 47 47 07 33 a2 f2 f7 17 |
|---|---|
| Parität | 0a 44 f1 e0 8a 95 8b 36 4e 60 cf e2 1c 26 2d 6a 28 dc 36 1d 4f 14 |
| Stufe | Daten | Daten und Parität | Korrigiert | Anteil | Blöcke |
|---|---|---|---|---|---|
| Lniedrig | 108 | 108 Daten, 26 Parität | 13 | 10% | 1 |
| Mmittel | 86 | 86 Daten, 48 Parität | 24 | 18% | 2 |
| Qerhöht | 62 | 62 Daten, 72 Parität | 36 | 27% | 4 |
| Hhochdieses Symbol | 46 | 46 Daten, 88 Parität | 44 | 33% | 4 |
Korrigiert summiert, was jeder Block für sich korrigiert. Das ist eine Obergrenze: Ein Symbol erreicht diese Summe nur, wenn die Beschädigung gleichmäßig über die Blöcke verteilt ist.
Die acht Module eines Codeworts bleiben zusammen in einem zwei Module breiten Stapel entlang der Platzierungsreihenfolge. Die Codewörter davor und danach im Strom gehören zu den anderen Blöcken.
Die Stapel haben nicht alle dieselbe Form, und die Form geht auf die Platzierungsreihenfolge zurück, nicht auf den Block.
Die Blöcke werden verschachtelt: Der Strom nimmt das erste Codewort von Block 1, dann das erste von Block 2 und so weiter, bis alle 4 Blöcke über das ganze Symbol verteilt sind. Beschädigung an einer Stelle verteilt sich dann auf die Blöcke und jeder verliert nur wenige Codewörter.
Die Parität wird je berührtem Codewort ausgegeben, nicht je Modul. Ein Fleck überdeckt ganze Codewörter, eine Streuung derselben Fläche berührt mit jedem Modul ein anderes Codewort. An diesem Symbol gemessen dekodiert der Code unter dem Fleck, mit dem die Demo öffnet, noch immer, gleich wo dieser Fleck liegt, und er überdeckt bis zu 184 Datenmodule. Gleichmäßig verteilt genügen 32 Module, um einen Block zu verlieren.
Ein Logo liegt auf einem Symbol wie dieser Fleck: Es überdeckt ganze Codewörter an einer Stelle und dieselbe Parität muss sie reparieren.
Beide Zahlen zählen nur Datenmodule. Ein Fleck über einem Suchmuster ist ein anderer Fehler: Die Parität deckt nichts außerhalb des Datenbereichs ab.
Die Mathematik
Verschachtelung: Bei Blöcken enthält Position des Stroms das Codewort von Block , bis die kurzen Blöcke aufgebraucht sind; die Paritätscodewörter werden nach den Daten auf dieselbe Weise verschachtelt.
Ziehe den Fleck oder bewege ihn mit den Pfeiltasten.
| Block | Getroffene Codewörter |
|---|---|
| 1 | 7 / 11 |
| 2 | 8 / 11 |
| 3 | 8 / 11 |
| 4 | 8 / 11 |
Jeder Block bleibt in seiner Grenze. Das Symbol dekodiert weiterhin.
Platzierung
Der verschachtelte Strom geht in einer festen Reihenfolge ins Raster: zwei Spalten auf einmal, beginnend in der unteren rechten Ecke, aufwärts durch das eine Spaltenpaar und abwärts durch das nächste, unter Auslassung der Funktionsmuster.
Diese Reihenfolge ist eine Eigenschaft der Version und nicht der Nachricht. Deshalb kann ein Scanner sie ablaufen, bevor er die Maske, die Stufe oder den Inhalt kennt.
Die 8 Füllcodewörter stehen am Ende der Nachricht, aber nicht am Ende des Laufs: Die Verschachtelung verteilt dieses Ende über das ganze Symbol.
Ein Schritt des Laufs nimmt das rechte Modul einer Zeile und dann das linke daneben, der Schritt danach geht eine Zeile weiter. Ein Paar wird ganz erstiegen oder ganz abgestiegen, und die Kehre kommt dort, wo oben oder unten die Daten ausgehen.
8 so genommene Module füllen vier Zeilen eines Paares, und daher kommen die Formen der Codewörter. Das hier hervorgehobene ist an beiden Enden versetzt: Es beginnt auf einem linken Modul, setzt also eine halbe Zeile versetzt ein, und über ihm gehen die Daten aus, sein letztes Modul ist deshalb das erste Modul des nächsten Paares.
Ein Paar überspringt das senkrechte Taktmuster als Ganzes, die Laufrichtung kehrt sich dort also nicht um, wo das Muster sitzt.
Die Mathematik
Man nummeriere eine Spalte vom rechten Rand aus und lasse das senkrechte Taktmuster aus der Zählung heraus. Ihr Paar ist , und dieses Paar wird erstiegen, wenn gilt, sonst abgestiegen.
Der Datenbereich umfasst 1.079 Module und die 134 Codewörter nehmen je 8 davon, zusammen 1.072. Am Ende der Reihenfolge bleiben also 7 Module übrig, zu wenige für ein weiteres Codewort. Die Spezifikation nennt sie Restbits: Sie werden wie jedes andere Modul platziert und maskiert. Ein Scanner verwirft sie.
Maskierung
Direkt ins Raster gelegt, können die Daten auf drei Arten ungünstig liegen: als große Fläche einer Farbe, als lange Strecke entlang einer Zeile oder Spalte, als Folge im Verhältnis 1:1:3:1:1, die ein Scanner für ein Suchmuster halten würde. Also legt der Kodierer eine Maske an, nachdem er die Daten platziert hat: ein festes geometrisches Muster, das benennt, welche Datenmodule invertiert werden.
Eine Maske anzulegen ist ein Exklusiv-Oder: Wo das Muster an ist, kommt das Modul in der anderen Farbe heraus, wo es aus ist, bleibt das Modul, wie es platziert wurde. Keine Maske rührt die Funktionsmodule an: die Such- und Ausrichtungsmuster, die Taktmuster, die Trennzonen um die Suchmuster und die Formatinformation daneben. Genau diese Ausnahme lässt einen Scanner ihnen trauen, bevor er weiß, welche Maske verwendet wurde. Es gibt acht Muster. Der Kodierer bewertet jedes nach vier Regeln und die niedrigste Summe gewinnt.
- Strecken
- Fünf oder mehr Module einer Farbe entlang einer Zeile oder Spalte. 3 Punkte und einer mehr für jedes Modul über dem fünften.
- Blöcke
- Jedes Zwei-mal-zwei-Quadrat einer Farbe. je 3 Punkte.
- Suchmusterähnlich
- Jede 1:1:3:1:1-Folge mit vier hellen Modulen daneben, die wie ein Suchmuster aussieht. je 40 Punkte.
- Ausgewogenheit
- Wie weit der Anteil dunkler Module von der Hälfte entfernt liegt. 10 Punkte je 5-%-Schritt außerhalb von 45 bis 55.
Die acht Summen laufen hier von 1634 für Maske 4 bis 1830 für Maske 6. Die Daten ganz ohne Maske kämen auf 1755, niedriger als 6 der acht. Der Kodierer kann vorher nicht wissen, welcher Inhalt sich schlecht platziert, also bewertet er jedes Mal alle acht. Würde sich ein Inhalt sonst als große leere Fläche platzieren, bricht die Maske sie auf.
Bewertet wird das ganze Symbol, ein echtes Suchmuster wird also dafür belastet, dass es wie eines aussieht: 18 der 21 suchmusterähnlichen Folgen der Siegermaske sind die drei Suchmuster selbst und 3 fallen in die Daten. Die Ausgewogenheitsregel ergibt für jeden Kandidaten null, die Entscheidung liegt also bei den ersten dreien.Sie kostet zwischen 45 % und 55 % Dunkelanteil nichts: Die platzierten Daten liegen bereits bei 49.6 % und die acht Kandidaten landen zwischen 49.5 % und 53.2 %.
Die Mathematik
Strecken und suchmusterähnliche Folgen werden auf Zeilen und Spalten unabhängig bewertet, eine Form, die auf beiden Achsen liegt, wird also doppelt belastet. Ein Zwei-mal-zwei-Block wird je linker oberer Ecke einmal gezählt, eine geschlossene Fläche von n mal n Modulen kostet also (n - 1)² davon.
- invertiert
- unverändert
- ausgenommen
| Maske | Invertiert ein Modul, wo | Strecken | Blöcke | Suchmusterähnlich | Ausgewogenheit | Gesamtwertung |
|---|---|---|---|---|---|---|
| 406 | 429 | 920 | 0 | 1755 | ||
| 442 | 495 | 840 | 0 | 1777 | ||
| 451 | 471 | 840 | 0 | 1762 | ||
| 434 | 429 | 920 | 0 | 1783 | ||
| 416 | 468 | 880 | 0 | 1764 | ||
| 365 | 429 | 840 | 0 | 1634 | ||
| 404 | 453 | 960 | 0 | 1817 | ||
| 437 | 513 | 880 | 0 | 1830 | ||
| 421 | 438 | 840 | 0 | 1699 |
Ein Scanner muss wissen, welche Maske er rückgängig machen soll, bevor er überhaupt etwas lesen kann, die Maskennummer steht also unmaskiert im Symbol. Die Formatinformation sind 15 Bit neben den Suchmustern, zweimal geschrieben: zwei Bit Fehlerkorrekturstufe (10 für Stufe H), drei Bit Maskennummer (100 für Maske 4) und zehn Prüfbit, aus diesen fünf berechnet. Alle 15 werden dann mit einem festen Wort verknüpft, damit keine Kombination aus Stufe und Maske als lauter Nullen herauskommt. Der Code korrigiert in jeder Kopie bis zu drei falsche Bit.
Die Mathematik
Die Prüfbits sind der Rest der fünf Datenbit, um zehn nach links geschoben, geteilt durch das Generatorpolynom . Das ist ein (15, 5)-BCH-Code: 32 gültige Wörter, von denen sich je zwei in mindestens sieben Bit unterscheiden, drei Fehler sind also korrigierbar. Die Stufenbits laufen nicht in der Reihenfolge der Stufen: L ist 01 und M ist 00.
| Daten- und Prüfbits | 10 100 1101110000 |
|---|---|
| Festes Wort | 10 101 0000010010 |
| Geschrieben | 00 001 1101100010 |
Gruppen: Stufe (2), Maske (3), Prüfbits (10).
Zurücklesen
Ein Scanner läuft die Schritte von oben rückwärts ab. Wähle einen Schritt, um zu sehen, was ein Scanner an dieser Stelle hat.
-
Drei 1:1:3:1:1-Folgen in den richtigen relativen Positionen ergeben die Ecken und die Drehung (den Code finden).
-
Die Taktmuster geben den Modulabstand und die Ausrichtungsmuster korrigieren die Perspektive. Dann wird ein Bit je Modul abgetastet.
-
Bis zu drei Bit darin korrigieren und die Fehlerkorrekturstufe und die Maskennummer entnehmen (Maskierung).
-
Jedes Datenmodul invertieren, das die Maske auswählt.
-
Die Bits entlang der Platzierungsreihenfolge zu Codewörtern lesen und sie zurück in ihre Blöcke sortieren (Fehlerkorrektur).
-
Jeder Block wird für sich korrigiert, gegen seine eigene Parität.
-
Segment für Segment, jedes mit eigenem Modus und eigener Anzahl, bis zum Endezeichen oder zum Ende der Daten (Kodierung).
Diese sieben Schritte erklären jedes Modul: 21 % Funktionsmuster und Formatinformation, 22 % Adresse, 5 % Füllung, 51 % Fehlerkorrektur. Die 7 Module, die am Ende der Platzierungsreihenfolge übrig bleiben, verwirft ein Scanner.
Ursprünge
Der Code wurde bei Denso von einem Team unter Leitung von Masahiro Hara entwickelt und 1994 vorgestellt. Das Problem war die Teileverfolgung. Ein Strichcode fasst etwa 20 Zeichen, eine Kiste mit Teilen trug also mehrere davon und ein Arbeiter am Band scannte rund 1000 Mal am Tag.
Das Raster kam von einem Brettspiel. Hara hat erzählt, dass er in den Mittagspausen im Büro Go spielte und dass ihm das Anordnen schwarzer und weißer Steine auf einem Raster als einfacher Weg erschien, Information zu halten. Dasselbe sagte er 2025 erneut, als der japanische Go-Verband ihn zum Go-Botschafter machte.
Das Verhältnis 1:1:3:1:1 fand das Team durch Auszählen von Druckerzeugnissen (Flyern, Zeitschriften, Karton): Gesucht war das Verhältnis von Dunkel zu Hell, das am seltensten vorkommt, damit eine Suche nach dem Muster nur selten auf den Druck rund um das Symbol passt.
AIM normte den Code 1997 und JIS 1999. ISO folgte 2000, als ISO/IEC 18004, die Spezifikation, die diese Seite zitiert.
DENSO WAVE hält Patente auf den QR Code und hat erklärt, sie gegen Codes, die der JIS- oder ISO-Norm folgen, nicht geltend zu machen. Haras Begründung war, dass ein einzelnes Unternehmen die Infrastruktur nicht schnell genug allein aufbauen könne. Einen normgerechten QR-Code zu erzeugen, braucht also keine Lizenz von DENSO WAVE.
"QR Code" ist eine eingetragene Marke der DENSO WAVE INCORPORATED in Japan und weiteren Ländern. QRBoat steht in keiner Verbindung zu ihnen und wird von ihnen weder unterstützt noch empfohlen.
Quellen
- Geschichte des QR Codes, DENSO WAVE
- Die Entstehungsgeschichte des QR Codes, DENSO WAVE
- Hara über die Mittagspause, aus der der Entwurf entstand, Tokai TV, 29. November 2019, auf Japanisch
- Hara zum Go-Botschafter ernannt, Nihon Ki-in, 19. August 2025, auf Japanisch
- Daten der Normung, von AIM bis ISO/IEC 18004, DENSO WAVE
- Patenterklärung, DENSO WAVE
- Markenerklärung, DENSO WAVE