
QR-Codes verstehen: vom schwarzen Quadrat zur Webseite
Sie richten das Telefon auf ein Quadrat auf dem Wirtshaustisch, und die Karte lädt, bevor Ihr Arm wieder unten ist. Nichts wurde getippt, nichts gekoppelt, und das Quadrat hat nirgendwohin etwas geschickt. Es lag einfach da, in einer sehr bestimmten Anordnung aus Schwarz und Weiß, und die Kamera hat es gelesen, wie Sie ein gedrucktes Wort lesen.
Hier ist die ganze Kette, von der Druckfarbe bis zur offenen Seite. Jedes Teilstück hat mehr Tiefe, als ein Abschnitt tragen kann, und mehrere haben anderswo einen eigenen Durchgang.
Drei Ecken erledigen zuerst den schweren Teil
Schauen Sie auf einen beliebigen QR-Code, und Sie sehen drei identische Quadrate-im-Quadrat: oben links, oben rechts, unten links. Das sind Suchmuster, und sie beantworten sofort zwei Fragen. Ist in diesem Bild ein Code, und wo ist oben?
Ihre Proportionen wurden mit Absicht gewählt. Ziehen Sie eine Linie durch eines von ihnen in beliebiger Richtung, und die Abfolge von Dunkel zu Hell ergibt 1:1:3:1:1. Dieses Verhältnis ist auf Fotos von Papier, Verpackungen und Tischplatten selten, also kann Software ein Kamerabild danach absuchen und nur danach. Findet sie drei, hat sie drei Ecken eines Quadrats. Die leere vierte Ecke sagt dem Decoder, wie der Code gedreht ist, weshalb ein seitlich an einen Laternenpfahl geklebter Code so scannt wie einer, der flach liegt.
Größere Codes ergänzen ein kleineres Ausrichtungsmuster nahe unten rechts. Ein Code liegt selten flach und gerade vor einer Linse: Er ist um eine Flasche gebogen, auf einem Tisch gekippt, schräg aufgenommen. Ausrichtungsmuster liefern feste Bezugspunkte, damit der Decoder das Bild in ein sauberes Raster zurückrechnen kann.
Zwischen den Suchmustern verlaufen zwei gepunktete Linien, eine waagerecht und eine senkrecht, abwechselnd dunkel und hell. Das sind Taktmuster. Sie setzen den Maßstab und sagen dem Decoder, wie breit eine Zelle ist.
Das Raster ist einfach nur Bits
Nehmen Sie die Ecken und die Taktlinien weg, und übrig bleibt ein Feld kleiner Quadrate, Module genannt. Dunkel ist eins, hell ist null. Das ist der gesamte Speichermechanismus.
Diese Bits werden in einem Zickzack gelesen, der unten rechts beginnt und sich in zweispaltigen Streifen nach oben schlängelt, dann das nächste Paar wieder hinunter. Die ersten paar geben den Kodiermodus an, denn QR-Codes packen verschiedene Inhalte unterschiedlich: Ziffern lassen sich enger stapeln als Buchstaben und Buchstaben enger als beliebige Bytes. Dann eine Längenangabe, dann die Nutzlast.
Die Nutzlast ist Text. Immer Text. Ein QR-Code enthält keine Website, kein Bild und keine Datei. Er hält eine kurze Zeichenkette, und Ihr Telefon entscheidet anhand ihres Anfangs, was damit zu tun ist. Etwas, das mit https:// beginnt, geht an einen Browser. Etwas, das mit WIFI: beginnt, geht an die Netzwerkeinstellungen, und mehr ist ein WLAN-QR-Code wirklich nicht. Etwas, das mit BEGIN:VCARD startet, geht an die Kontakte. Das Muster selbst ist dumm. Die Konventionen darum herum machen die Arbeit.
Warum ein Kaffeerand ihn nicht umbringt
Enthielte das Raster nur Ihre URL, würde ein verschmiertes Modul es zerstören. Tut es nicht. Ein erheblicher Anteil der Module trägt Reed-Solomon-Fehlerkorrekturdaten, Polster, mit dem ein Decoder aus dem Überlebenden rekonstruieren kann, was er nicht sieht.
Wie viel Polster, wählen Sie bei der Erzeugung. Es gibt vier Stufen, die rund 7 %, 15 %, 25 % und 30 % des Codes wiederherstellen:
- Stufe L, etwa 7 %, quetscht die meisten Daten in das kleinste Raster. Auf einem Bildschirm völlig in Ordnung.
- Die 15-%-Stufe M ist die übliche Voreinstellung und für den Druck vernünftig.
- Q, bei rund 25 %, kauft Luft für Etiketten, die angefasst oder nass werden.
- Nehmen Sie H, nahe 30 %, wenn etwas auf dem Code sitzen wird.
Der letzte Fall ist der Grund, warum ein Logo mitten im QR-Code überhaupt funktioniert. Das Logo ist kein Teil der Daten. Es verdeckt Module, und die Fehlerkorrektur baut sie stillschweigend wieder auf. Verdecken Sie mehr, als die Stufe erlaubt, und der Code ist tot, und genau so bringt ein Logo, das immer weiter wächst, ein Design um, das letzte Woche noch einwandfrei scannte.
Noch ein Kniff steckt drin: die Maskierung. Rohdaten erzeugen manchmal große leere Flächen oder zufällige Kopien des Suchmusters, was Scanner beides verwirrt. Also verrechnet der Encoder das Raster per XOR gegen jedes von acht Standardmustern und behält das, was am gleichmäßigsten durchmischt herauskommt. Zwei kurze Streifen Formatinformation neben den Suchmustern halten fest, welche Maske und welche Fehlerkorrekturstufe verwendet wurden, damit der Decoder es rückgängig machen kann.
Größere Codes sind nicht einfach herangezoomt
QR-Codes gibt es in Versionen von 1 bis 40. Version 1 ist ein Raster von 21 mal 21. Jeder Schritt nach oben fügt vier Module je Seite hinzu, sodass Version 40 bei 177 mal 177 landet. Mehr Inhalt heißt höhere Version und mehr Module, gequetscht in dasselbe physische Quadrat.
Im Druck zählt das mehr, als man erwartet. Ein Code der Version 3 und einer der Version 25 auf derselben Visitenkarte sehen fürs Auge gleich groß aus, aber der zweite hat Module von einem Bruchteil der Breite. Ein billiger Drucker verschmiert sie, und ein Telefon auf Armlänge kann sie nicht auflösen. Die kodierte URL zu kürzen ist oft die billigste Abhilfe für einen Code, der nicht liest. Der Größenleitfaden hat die Rechnung von Abstand zu Größe.
Der weiße Rand ist ebenfalls Teil der Spezifikation, keine Deko. Er heißt Ruhezone und läuft auf jeder Seite etwa vier Module breit. Codes, die an ein farbiges Feld oder eine Seitenkante stoßen, scheitern ständig aus genau diesem Grund.
Was nach der Kamera passiert
Das Dekodieren dauert Bruchteile einer Sekunde und läuft vollständig auf dem Gerät. Grob: das Bild in Schwarzweiß wandeln, das Verhältnis 1:1:3:1:1 suchen, drei Suchmuster fixieren, jedes Modul abtasten, die Formatbits lesen, die Maske entfernen, Fehlerkorrektur laufen lassen, die Bytes zusammensetzen, eine Zeichenkette ausgeben.
Erst danach passiert etwas Sichtbares. Ihr Telefon zeigt Ihnen die Zeichenkette oder eine Vorschau davon und wartet auf einen Tipp. Diese Pause ist die gesamte Sicherheitsschicht, denn der Scanschritt behandelt einen Aufkleber, den jemand über eine Parkuhr geklebt hat, genauso getreu wie das Echte darunter.
Ist die Zeichenkette ein Link, öffnet ein Tipp den Browser, und das gewöhnliche Web übernimmt. Ein statischer Code schickt Sie direkt an die Adresse, die der Ersteller getippt hat. Ein dynamischer Code schickt Sie erst an eine kurze Weiterleitung, die den Scan protokolliert und Sie weiterreicht. Dieser Zwischenschritt ist der einzige Grund, warum dynamische Codes nach dem Druck bearbeitet und gezählt werden können. Die Quadrate ändern sich nie. Was am Ende der Weiterleitung wartet, schon.
Wo Ihnen das in Deutschland täglich begegnet
Drei Codes aus dem Alltag zeigen, dass die Nutzlast die eigentliche Unterscheidung ist. Der GiroCode auf einer Rechnung ist reiner Text mit Empfänger, IBAN und Betrag, den eine Banking-App in ein Überweisungsformular übernimmt; eine Kamera-App zeigt davon nur Zeichen. Der Code auf einem Bahnticket ist häufig gar kein QR-Code, sondern ein Aztec-Symbol für das Kontrollgerät des Personals. Und das Quadrat auf dem Tischaufsteller ist eine Adresse, die einen Browser öffnet. Wer weiß, welche Sorte vor ihm liegt, weiß auch, welche App zuständig ist, und hält nicht das falsche Werkzeug für defekt.
Die verbreitete Zurückhaltung gegenüber unerklärten Codes ist dabei kein Aberglaube, sondern ein vernünftiger Reflex, und sie lässt sich beantworten. Ein nacktes Quadrat sagt nicht, wohin es führt, also bleibt es ungescannt. Ein kurzer Satz darunter, der Ziel und Zweck nennt, bewegt mehr als jede Gestaltung. Und auf einer geschäftlichen Zielseite gehören Impressum und Datenschutzhinweise nach unten, denn genau dort wird nachgesehen, wer dahintersteht.
Bleibt der Teil, den die Technik nicht löst: das Netz. Das Dekodieren passiert im Gerät, das Laden der Seite braucht Empfang. Im Altbaukeller, in der Tiefgarage, im Zug und auf der Festwiese bricht der zweite Schritt und nicht der erste. Deshalb gehört zu jedem Code mit Inhalt eine leichte Seite, und dort, wo es auf die Information ankommt, zusätzlich eine gedruckte Kurzfassung.
Wo es tatsächlich schiefgeht
Fast jeder Fehlschlag hat eine physische Ursache und nicht eine mathematische. Zu wenig Kontrast zwischen Modulen und Untergrund. Ein invertierter Code, hell auf dunkel, den manche Scanner verweigern. Eine fehlende Ruhezone. Zulaufende Farbe, die die dunklen Module so verdickt, dass das Raster verschmiert. Spiegelung auf einem laminierten Aufsteller. Und ein Code, der halb so groß gedruckt ist, wie es sein Leseabstand verlangt.
Wenn Sie einen haben, der nicht mehr funktioniert, fangen Sie vor allem anderen mit Kontrast und Rand an. Diese beiden erklären das meiste, und die Diagnosereihenfolge von dort aus dauert etwa fünf Minuten.


