QR-Code-Generator

Erzeuge einen QR-Code und sieh die Entscheidungen dahinter: Modusaufteilung, Version, Fehlerkorrektur, die acht Masken und was ein Logo wirklich kostet.

Inhalt
Was tatsächlich kodiert wird
https://seladevtools.com/qr-code-generator
Code

Version 3 · 29×29 Module · Stufe M · Maske 7

Optionen
Fehlerkorrektur
Farben
Logo
Was der Kodierer entschieden hat
Version
3 · 29×29 Module
Stufe
M
Maske
7 (geringste Strafe)
Daten
348 von 352 Bit
Codewörter
44 Daten + 26 Korrektur, in 1 Blöcken

Segmente

ModusZeichenBit
byte42348

Strafpunkte der Masken

MaskeSerienBlöckeSuchmusterähnlichBalanceSumme
03253511200796
13313752800986
22943452800919
33223451600827
43303301200780
53123481600820
63223513200993
72892731600722

Die vier Regeln bestrafen lange Serien einer Farbe, 2×2-Blöcke, die Folge 1:1:3:1:1, die ein Scanner mit einem Suchmuster verwechselt, und einen Dunkelanteil weit weg von der Hälfte. Die niedrigste gewinnt; ein Klick auf eine Zeile erzwingt sie.

In jedem QR-Code stecken vier Entscheidungen

Man fügt Text in einen QR-Generator ein, und heraus kommt ein schwarzweißes Quadrat. Was nicht gezeigt wird: der Kodierer hat gerade vier eigenständige Entscheidungen für einen getroffen, von denen jede das Ergebnis verändert und jede auch anders hätte ausfallen können.

Dieses Werkzeug zeigt alle vier, denn dort liegt das Interessante. Sobald man sie sieht, hört das scheinbar willkürliche Verhalten auf, willkürlich zu sein — dass der Code bei einem zusätzlichen Zeichen eine Größe springt, dass ein Logo beim einen Code funktioniert und beim nächsten nicht.

  • Die Modusaufteilung: die Norm kennt vier Arten, Zeichen zu packen, und dein Text wird auf sie verteilt.
  • Die Version: eine Zahl von 1 bis 40, die das Raster zwischen 21×21 und 177×177 Modulen festlegt.
  • Die Fehlerkorrekturstufe: L, M, Q oder H, die bestimmt, wie viel vom Symbol zerstört werden darf und es trotzdem lesbar bleibt.
  • Die Maske: eines von acht Mustern, das per XOR über die Daten gelegt wird, um Formen aufzubrechen, die einen Scanner verwirren.

Keine der vier ist Geschmackssache. Jede hat bei gegebenen anderen eine richtige Antwort, und genau deshalb lohnt es sich hinzusehen: sie wirken aufeinander.

Den Text aufzuteilen ist ein Kürzeste-Wege-Problem

Der numerische Modus gibt 10 Bit für je drei Ziffern aus. Der alphanumerische gibt 11 Bit für je zwei Zeichen aus, aus einem Vorrat von 45: Ziffern, Großbuchstaben, Leerzeichen und neun Satzzeichen. Der Byte-Modus gibt 8 Bit je UTF-8-Byte aus. Der Kanji-Modus gibt 13 Bit für ein Zeichen aus, für das der Byte-Modus 24 bräuchte.

Die günstigste Kodierung ist deshalb selten ein einziger Modus für die ganze Zeichenkette — doch Wechseln ist auch nicht umsonst, denn jedes Segment zahlt einen 4-Bit-Moduskennzeichner und ein Zeichenzählfeld. Ob sich eine Ziffernfolge herauszulösen lohnt, hängt von ihrer Länge ab. Damit wird die Aufteilung zu einem Kürzeste-Wege-Problem, und dieser Kodierer löst es exakt, statt mit einer Faustregel zu raten.

HELLO12345678901234567890

as one alphanumeric segment
  4 + 9 + (11 x 12) + 6 = 151 bits

split at the digits
  4 + 9  + (11 x 2) + 6 =  41 bits
  4 + 10 + (10 x 6) + 7 =  81 bits
  total                 = 122 bits

Neunundzwanzig Bit, was in Version 1 der Unterschied zwischen Hineinpassen und Nichthineinpassen ist. Die Segmenttabelle auf der Seite zeigt die tatsächlich gewählte Aufteilung und was jedes Segment gekostet hat, sodass man sieht, welche Zeichen teuer sind.

Version und Aufteilung jagen einander

Hier liegt der Haken, an dem ein naiver Kodierer scheitert. Das Zeichenzählfeld hat keine feste Breite. Für den Byte-Modus sind es 8 Bit in den Versionen 1 bis 9 und 16 Bit ab Version 10; der numerische Modus geht an denselben Grenzen über 10, 12 und 14.

Die Kosten der Aufteilung hängen also von der Version ab, und die Version von den Kosten der Aufteilung. Der Ausweg: es gibt nur drei Versionsgruppen. Die Aufteilung wird je Gruppe einmal berechnet, und die kleinste Version gewinnt, in die eine davon passt.

  • Versionen 1–9: numerisch 10 Bit, alphanumerisch 9, Byte 8, Kanji 8.
  • Versionen 10–26: numerisch 12, alphanumerisch 11, Byte 16, Kanji 10.
  • Versionen 27–40: numerisch 14, alphanumerisch 13, Byte 16, Kanji 12.

Die Maske wird über vier Strafregeln gewählt

Die Daten in einem QR-Code sind nahezu zufällig, und zufälliges Schwarzweiß erzeugt Formen, die ein Scanner mit den Strukturmustern verwechseln kann, nach denen er sucht. Das Gegenmittel ist ein XOR über den Datenbereich mit einem regelmäßigen Muster, das genau diese Formen aufbricht. Es gibt acht davon, und der Kodierer probiert alle.

Jedes maskierte Symbol wird nach vier Regeln der Norm bewertet, und die niedrigste Summe gewinnt. Die Tabelle auf der Seite zeigt alle acht Werte nach Regeln aufgeschlüsselt; ein Klick auf eine Zeile erzwingt diese Maske, damit man die Wirkung sieht.

  • Serien: drei Punkte für fünf benachbarte Module derselben Farbe in Zeile oder Spalte, plus einen für jedes weitere Modul.
  • Blöcke: drei Punkte für jede einfarbige 2×2-Fläche.
  • Suchmusterähnlich: vierzig Punkte für die Folge 1:1:3:1:1 dunkel-hell-dunkel-hell-dunkel neben vier hellen Modulen — das Muster, das den Eckquadraten ähnelt.
  • Balance: zehn Punkte für jede vollen 5%, um die der Anteil dunkler Module von der Hälfte abweicht.

Hier weichen die Implementierungen leicht voneinander ab — darin, ob das Muster 1:1:3:1:1 auch in größerem Maßstab zählt, und ob die Formatinformation in die Bewertung eingeht. Dieser Kodierer folgt der Lesart von ZXing, die auf den meisten Handykameras läuft, und ist gegen zwei unabhängige Implementierungen abgesichert. Die Abweichung erzeugt nie einen ungültigen Code; sie entscheidet nur, welche von mehreren einwandfrei lesbaren Masken gewählt wird.

Was ein Logo in der Mitte wirklich kostet

Alle wiederholen dieselbe Regel: Stufe H stellt 30% wieder her, also darf man bis zu 30% des Codes verdecken. Das ist eine Antwort in der falschen Form, und wer ihr folgt, hält irgendwann einen Code in der Hand, der nicht scannt.

Die Fehlerkorrektur eines QR-Codes ist kein gemeinsamer Topf. Die Daten werden in Reed-Solomon-Blöcke zerlegt, jeder mit eigenen Korrekturcodewörtern, und die Blöcke sind über das ganze Raster verschränkt, damit ein Kratzer mehrere ein wenig beschädigt statt einen sehr. Jeder Block verkraftet ungefähr die Hälfte seiner Korrekturcodewörter und wird wieder aufgebaut. Ein Logo in der Mitte ist ein massives Quadrat — genau die Form, die die Verschränkung verteilen soll, und sie verteilt sie nie gleichmäßig.

Die Frage lautet also nicht, welcher Anteil des Symbols verdeckt ist, sondern wie viel der am stärksten getroffene Block verloren hat. Diese Seite weiß, zu welchem Codewort jedes Modul gehört und aus welchem Block jedes Codewort stammt, kann das also direkt beantworten: Logo hochladen, und sie meldet den Schaden je Block und den Spielraum des schlechtesten.

  • Ein Suchmuster, ein Taktmuster oder die Formatinformation zu verdecken ist keine Budgetfrage: sie tragen keine Korrektur, und ein Scanner, der sie nicht findet, kommt gar nicht erst zum Korrigieren.
  • Die Hälfte der Codewörter ist eine Obergrenze. Druck, Reflexe, gewölbte Flächen und Abnutzung zehren am selben Budget, und ein Code, der am Bildschirm genau an der Grenze liegt, liegt es auf einer Tasse nicht mehr.
  • Für ein größeres Logo auf Stufe H zu gehen vergrößert das Symbol und verkleinert damit bei gleicher Druckgröße jedes Modul — manchmal ein Verlust statt eines Gewinns.

Die Nutzlastformate und wo sie beißen

Ein Wi-Fi-QR-Code oder eine Kontaktkarte sind nur Text in einer Form, die Scanner erkennen. Die Formen sind einfach; woran echte Codes scheitern, sind die Escaping-Regeln, und das sind stille Fehler: der Code scannt einwandfrei und liefert die falsche Antwort.

WIFI:T:WPA;S:Cafe\; Bar;P:p\:ssw\,rd;;

BEGIN:VCARD
VERSION:3.0
N:Lovelace;Ada;;;
FN:Ada Lovelace
ORG:Analytical Engines\, Ltd
END:VCARD

Im Wi-Fi-Format beendet ein Semikolon ein Feld, ein Passwort mit Semikolon kürzt die Zugangsdaten also, wenn es nicht escapt wird — ebenso Komma, Doppelpunkt, Anführungszeichen und Rückstrich. Ein Netzwerkname aus lauter Hexadezimalziffern muss in Anführungszeichen stehen, sonst wird er als Hexadezimalwert gelesen statt als Text. In vCard sind die Trenner Semikolon und Komma, eine Zeile über 75 Oktetten muss auf eine mit Leerzeichen beginnende Fortsetzungszeile umbrochen werden, und das Zeilenende ist CRLF.

Die Baukästen hier wenden das alles an und sagen, was sie getan haben, statt deine Eingabe stillschweigend umzuschreiben. Erscheint unter den Feldern ein Hinweis, brauchte etwas in deinem Text eine Behandlung — und das weiß man besser, bevor man tausend Aufkleber druckt.

Häufig gestellte Fragen

Warum wurde der Code durch ein einziges Zeichen so viel größer?
Weil sich die Modusaufteilung, die Version oder beides geändert hat. Ein einzelner Kleinbuchstabe in einer sonst großgeschriebenen Zeichenkette kann ein ganzes Segment vom alphanumerischen in den Byte-Modus drücken, der acht Bit je Zeichen kostet statt fünfeinhalb. Der Sprung von Version 9 auf 10 verbreitert außerdem jedes Zeichenzählfeld. Die Segmenttabelle zeigt, wohin die Bits gegangen sind.
Welche Fehlerkorrekturstufe soll ich nehmen?
M ist die vernünftige Voreinstellung und das, was die meisten Codes draußen verwenden. Geh auf Q oder H, wenn der Code klein gedruckt wird, auf etwas Gewölbtem sitzt, auf einer Fläche, die angefasst wird, oder wenn du die Mitte mit einem Logo verdeckst. Geh nur auf L, wenn die Nutzlast lang ist und der Code vom Bildschirm gelesen wird. Höhere Stufen liefern keine Zuverlässigkeit umsonst: sie vergrößern das Symbol bei gleichen Daten, und ein größeres Symbol hat bei gleicher Druckgröße kleinere Module.
Wie groß darf das Logo in der Mitte sein?
Lade es hoch, und die Seite sagt es dir, denn die ehrliche Antwort hängt von Version, Stufe und davon ab, wo die Blöcke gerade liegen. Was sie nicht tut, ist die 30-Prozent-Regel nachzuplappern, die von Codewörtern und nicht von Fläche spricht und vom ganzen Symbol statt vom schlechtesten Block. Als Ausgangspunkt: 15% der Seitenlänge auf Stufe H ist meist bequem, 25% meist nicht.
Macht das Großschreiben einer URL den Code wirklich kleiner?
Oft ja. Der alphanumerische Modus kennt keine Kleinbuchstaben, eine kleingeschriebene URL landet also im Byte-Modus mit acht Bit je Zeichen, während eine großgeschriebene mit fünfeinhalb in den alphanumerischen passt. Schema und Host sind unabhängig von der Schreibweise, HTTPS://EXAMPLE.COM wirkt also genau wie https://example.com — der Pfad aber ist es nicht und darf nicht angefasst werden. Die Seite misst die Ersparnis an deiner konkreten URL und bietet die Änderung nur an, wenn sie hilft.
Lohnt sich der Kanji-Modus für japanischen Text?
Ja — 13 Bit je Zeichen, wo der Byte-Modus in UTF-8 24 braucht, japanischer Text kommt also fast halb so groß heraus. Er deckt den Doppelbyte-Bereich von Shift_JIS ab, der Kana, die Kanji aus JIS X 0208 und auch Griechisch und Kyrillisch umfasst. Diese Seite lädt die Zuordnungstabelle nur, wenn dein Text kein reines ASCII ist; ein Code mit einer URL lädt sie also nie.
Soll ich die UTF-8-Deklaration einschalten?
Meistens nicht. Die Norm sagt, der Byte-Modus sei ISO-8859-1, sofern kein ECI-Kopf etwas anderes sagt, aber in der Praxis behandelt ihn jeder Scanner dieses Jahrhunderts als UTF-8, und genau das schreibt dieser Kodierer. Die ausdrückliche Deklaration kostet 12 Bit und verwirrt manche alten Industrielesegeräte. Schalte sie ein, wenn du auf ein bestimmtes Gerät zielst, das ECI-Unterstützung dokumentiert.
Warum gibt es kein Micro QR und keinen mehrteiligen Code?
Beides steht in der Norm, und beides gäbe dir etwas, das nicht scannt. Micro QR ist eine eigene Symbologie mit eigenen Kapazitätstabellen, eigenem Maskensatz und eigener Formatkodierung, und die meisten Kamera-Apps lesen es nicht. Structured Append verteilt die Nutzlast auf bis zu sechzehn Symbole, die so gut wie kein Verbraucherscanner wieder zusammensetzt. Passen deine Daten nicht in Version 40, gehört eine URL in den Code und die Daten dahinter.
Wie klein darf ein QR-Code gedruckt werden?
Die übliche Empfehlung lautet, ein Modul solle im Druck mindestens 0,4 mm messen und der Code etwa ein Zehntel des Leseabstands geteilt durch die Versionsgröße betragen — die praktische Schranke ist aber die Ruhezone. Die Norm verlangt vier Module freien Rand auf allen Seiten, und der häufigste Fehler in der Praxis ist ein Code, der direkt an anderes Layout stößt. Version und Modulzahl auf der Seite sind genau das, was man für diese Rechnung braucht.