QR-Code-Fehlerkorrektur erklärt (L, M, Q, H): Welche Stufe solltest du tatsächlich nutzen?
Nimm einen beliebigen QR-Code-Generator und du siehst vier Optionen, beschriftet mit L, M, Q und H. Die meisten Leute lassen die Voreinstellung stehen und machen weiter — bis der gedruckte Code aus der Druckerei uneinlesbar zurückkommt, oder ein Marketing-Team ein Logo in die Mitte setzt und der gesamte Code stirbt. Die Fehlerkorrekturstufe ist keine kosmetische Einstellung. Sie bestimmt, wie viel physischen Schaden ein Code überleben kann, und sie steht in direktem Tausch gegen die Datenmenge, die der Code aufnehmen kann.
Dieser Artikel erklärt, was diese Stufen tatsächlich innerhalb der QR-Spezifikation (ISO/IEC 18004) tun, wie sie die Kapazität mit echten Zahlen verändern, und wie du die richtige für deinen Anwendungsfall wählst.
Was Fehlerkorrektur tatsächlich ist
Ein QR-Code kodiert nicht nur deine Daten — er kodiert auch redundante Informationen, die es einem Leser erlauben, beschädigte oder unlesbare Teile des Codes zu rekonstruieren. Der Mechanismus ist die Reed–Solomon-Fehlerkorrektur, dieselbe Algorithmenfamilie, die auf CDs, DVDs, Blu-ray-Discs und in der Deep-Space-Kommunikation verwendet wird.
Wenn ein QR-Code erzeugt wird, wird die Datennutzlast in Blöcke aufgeteilt, und für jeden Block berechnet der Encoder einen Satz von Fehlerkorrektur-Codewörtern. Findet ein Leser später Module (die schwarzen und weißen Quadrate), die unlesbar sind — wegen eines Kratzers, eines Kaffeeflecks, schlechter Beleuchtung oder eines überlagerten Logos — nutzt er diese redundanten Codewörter, um die fehlenden mathematisch wiederherzustellen.
Reed–Solomon-Codes haben eine nützliche Eigenschaft: um t fehlerhafte Codewörter an unbekannten Positionen zu korrigieren, brauchst du 2t redundante Codewörter. (Kennst du die Positionen der beschädigten Codewörter — sogenannte „Löschungen” — behebt jedes Redundanz-Codewort einen.) Die Fehlerkorrekturstufe steuert schlicht, wie viel des gesamten Codewort-Budgets für Redundanz versus Nutzlast ausgegeben wird.
Die vier Stufen, in Zahlen
Die Spezifikation ISO/IEC 18004 definiert vier Fehlerkorrekturstufen mit diesen ungefähren Wiederherstellungsfähigkeiten — dem Anteil der Codewörter, die beschädigt sein dürfen und trotzdem vollständig wiederhergestellt werden:
| Stufe | Name | Wiederherstellungsfähigkeit |
|---|---|---|
| L | Niedrig | ~7% der Codewörter |
| M | Mittel | ~15% der Codewörter |
| Q | Quartil | ~25% der Codewörter |
| H | Hoch | ~30% der Codewörter |
Zwei wichtige Nuancen, die der einfache Prozentsatz verbirgt:
- Der Prozentsatz gilt für Codewörter, nicht für die Modulfläche. Die populäre Faustregel „Stufe H übersteht 30% abgedeckten Code” ist in der Praxis ungefähr zutreffend, weil Schäden meist zusammenhängend auftreten, aber die formale Grenze bezieht sich auf beschädigte Codewörter. Räumlich geclusterter Schaden (wie ein Logo) ist oft einfacher zu überleben als dieselbe Anzahl zufällig verteilter Fehler, weil Löschungen billiger zu korrigieren sind als Fehler unbekannter Position.
- Höhere Stufen kosten Kapazität. Mehr Redundanz bedeutet weniger Platz für die Nutzlast bei derselben Version (Größe). Passen die Daten nicht, muss der Encoder auf eine größere Version springen — mehr Module, dichterer Druck, schwieriger aus der Ferne zu scannen.
Kapazität: Was dich die Stufen in der Praxis kosten
QR-Codes gibt es in 40 Größen, genannt Versionen. Version 1 ist 21×21 Module, und jede nachfolgende Version fügt 4 Module pro Seite hinzu, bis zu Version 40 mit 177×177. Die folgende Tabelle zeigt die maximalen Zeichenkapazitäten aus der Spezifikation für drei repräsentative Nutzlasttypen, über die vier Stufen. (Der Byte-Modus deckt beliebige UTF-8-ähnliche Binärdaten und typische URLs ab; der alphanumerische Modus deckt 0–9 A–Z Leerzeichen $%*+-./: ab; der numerische Modus ist nur Ziffern.)
| Version | Module | Stufe | Numerisch | Alphanumerisch | Byte |
|---|---|---|---|---|---|
| 1 | 21×21 | L | 41 | 25 | 17 |
| 1 | 21×21 | M | 34 | 20 | 14 |
| 1 | 21×21 | Q | 27 | 16 | 11 |
| 1 | 21×21 | H | 17 | 10 | 7 |
| 5 | 37×37 | L | 255 | 154 | 106 |
| 5 | 37×37 | M | 202 | 122 | 84 |
| 5 | 37×37 | Q | 144 | 87 | 60 |
| 5 | 37×37 | H | 106 | 64 | 44 |
| 10 | 57×57 | L | 652 | 395 | 271 |
| 10 | 57×57 | M | 513 | 311 | 213 |
| 10 | 57×57 | Q | 364 | 221 | 151 |
| 10 | 57×57 | H | 288 | 174 | 119 |
| 20 | 97×97 | L | 2061 | 1249 | 858 |
| 20 | 97×97 | M | 1600 | 970 | 666 |
| 20 | 97×97 | Q | 1120 | 679 | 466 |
| 20 | 97×97 | H | 861 | 521 | 358 |
| 40 | 177×177 | L | 7089 | 4296 | 2953 |
| 40 | 177×177 | M | 5596 | 3391 | 2331 |
| 40 | 177×177 | Q | 3993 | 2420 | 1663 |
| 40 | 177×177 | H | 3057 | 1852 | 1273 |
Lies dir Version 1 genau durch: der Wechsel von L zu H schneidet die Byte-Kapazität von 17 auf 7 herunter — eine Reduktion um 59%. Dieser Tausch lohnt sich für gewöhnlich beim Druck, aber er ist ein echter Preis. Eine lange URL, die in einem Code der Version 4 mit Stufe M bequem Platz hat, könnte mit Stufe H einen Code der Version 6 erzwingen, und größere Codes bedeuten kleinere Module bei derselben Druckgröße.
Kürzere Nutzlasten schlagen immer stärkere Fehlerkorrektur. Eine kurze URL in einem Code niedriger Version mit Stufe H wird fast jedes Mal besser scannen als eine lange URL in einem Code hoher Version mit Stufe L. Wenn du eine URL kodierst, verwende eine kurze Domain oder eine Weiterleitung. Das zählt mehr als jede andere Optimierung.
Druckgröße und Scanquote: Die 10:1-Regel
Fehlerkorrektur kann keinen Code retten, der schlicht zu klein zum Auflösen ist. Die weitverbreitete Feldregel ist das Verhältnis 10:1: die Scanquote sollte nicht mehr als etwa das Zehnfache der Codebreite betragen. Einige Quellen geben 10:1 als konservativ an und nennen erfolgreiche Scans näher an 15:1 mit guten Kameras und Beleuchtung, aber 10:1 ist die Zahl, gegen die du designst.
- Visitenkarten-Code, 2 cm breit → zuverlässig bis ~20 cm
- Poster-Code, 10 cm breit → zuverlässig bis ~1 m
- Plakatwand-Code, 1 m breit → zuverlässig bis ~10 m
Zwei verwandte Einschränkungen:
- Modulgröße. Jedes Modul sollte mindestens ungefähr 0,4 mm groß sein (etwa 2 mils sind bei Weitem zu klein; 0,4 mm ist eine gängige Druck-Untergrenze), damit Telefonkameras es auflösen können. Für einen Code der Version 10 (57 Module) ist das eine Mindestdruckgröße von etwa 2,3 cm nur für den Datenbereich.
- Die Ruhezone. Die Spezifikation verlangt einen Rand von mindestens 4 Modulen weißem Raum um den Code. Das Beschneiden der Ruhezone ist einer der häufigsten Gründe, warum gedruckte Codes scheitern, und keine Fehlerkorrekturstufe behebt das — die Leser nutzen die Ruhezone, um die Kanten des Codes zu finden.
Warum Logos Stufe H verlangen
Ein Logo in die Mitte eines QR-Codes einzubetten ist der klassische Grund, warum Stufe H existiert. Das Logo bedeckt physisch Module und zerstört die darunterliegenden Codewörter. Das Wiederherstellungsbudget von ~30% der Stufe H ist das, was dies überlebbar macht.
Praktische Regeln für Logo-Überlagerung:
- Verwende H. Immer. Bei M (~15%) frisst ein schon mäßig großes Logo den Großteil des Budgets.
- Halte das Logo unter ~30% der Gesamtfläche des Codes — und vorzugsweise deutlich darunter, weil die abgedeckte Fläche selten sauber über Codewort-Blöcke verteilt ist. Ein Logo, das 20% der Fläche mit Stufe H abdeckt, ist ein komfortables Design; 28% ist Glücksspiel.
- Bleibe in der Mitte. Die drei Finder-Muster (die großen Quadrate in den Ecken) und die Timing-/Ausrichtungsmuster tragen strukturelle Daten, die Fehlerkorrektur nicht auf gleiche Weise schützt. Zentrale Platzierung umgeht sie.
- Teste auf echten Telefonen, bei echter Distanz, bei schlechtem Licht. Nicht nur dein Flaggschiff-Telefon auf dem Schreibtisch. Ältere Android-Geräte mit mittelmäßigen Kameras sind der Boden, für den du designst.
Beachte, dass Generatoren, die dich ein Logo auf einen Code legen lassen, ohne nach der Stufe zu fragen, implizit auf die Stufe wetten, die du anderswo gewählt hast. Wenn du L einstellst und ein Logo hinzufügst, hast du einen Code geschaffen, der oft, aber nicht immer scheitert — das schlimmstmögliche Ergebnis, weil er beiläufige Tests besteht und im Feld versagt.
Wie du tatsächlich wählst
Stufe L (~7%) — Reine Digitalkontexte, in denen das Bild perfekt gerendert wird: App-zu-App-Übergabe, Bildschirme, generierte Tickets, die auf einem Telefon angezeigt werden. Saubere Pixel bedeuten, dass kaum etwas schiefgehen kann, also investiere das Budget in Kapazität und kleine Größe. Selten die richtige Wahl anderswo.
Stufe M (~15%) — Die allgemeine Voreinstellung für sauberen Druck: Visitenkarten, Produktverpackungen, Dokumente. Übersteht normalen Handhabungsverschleiß, kleinere Druckfehler und Reflexionen. Die meisten Generator-Voreinstellungen landen hier, und das aus gutem Grund.
Stufe Q (~25%) — Raue physische Umgebungen ohne Logo-Überlagerung: Industrielabels, Lagerregale, Gerätekennzeichnungen, Außenbeschilderung, die Witterung ausgesetzt ist. Wenn die Oberfläche im normalen Gebrauch zerkratzt, verschmutzt oder teilweise verdeckt wird, ist Q das Arbeitstier.
Stufe H (~30%) — Logo-Überlagerung, sehr raue Umgebungen oder Situationen, in denen ein fehlgeschlagener Scan teuer ist (Zahlungscodes, sicherheitskritische Etiketten). Auch die richtige Wahl, wenn du sehr klein drucken musst und Kameras geringer Qualität erwartest.
Der Entscheidungsbaum komprimiert sich zu: digital → L oder M; sauberer Druck → M; raue Umgebung → Q; Logo oder kritische Zuverlässigkeit → H. Und unabhängig von der Stufe: halte die Nutzlast kurz, halte die Ruhezone ein und respektiere die 10:1-Distanzregel.
Überprüfe es selbst
Theorie ist gut, aber QR-Fehlerkorrektur lässt sich empirisch leicht testen. Generiere dieselbe URL auf jeder Stufe mit unserem QR-Code-Generator und vergleiche:
- Generiere den Code auf Stufe L, dann M, Q und H. Beachte den Anstieg der Moduldichte — diese visuelle Dichte ist die Redundanz.
- Drucke die Version mit Stufe H, decke die Mitte mit einer Münze oder einem Aufkleber ab (~20% der Fläche) und scanne sie. Sie sollte weiterhin funktionieren.
- Versuche dasselbe mit der Version auf Stufe L. Es wird nicht funktionieren.
- Nimm den Code mit Stufe H und decke schrittweise mehr Fläche ab, bis Scans scheitern — du wirst feststellen, dass die praktische Grenze nahe am theoretischen ~30% liegt.
Du wirst auch den Kapazitätstausch direkt sehen: füge eine lange URL ein und beobachte, welche Version (Größe) jede Stufe erfordert. Dieses Experiment lehrt den Kompromiss schneller als jede Tabelle.
Zusammenfassung
- Fehlerkorrektur in QR-Codes ist Reed–Solomon-Redundanz; die Stufe legt fest, wie viel des Codewort-Budgets Redundanz ist: L ≈ 7%, M ≈ 15%, Q ≈ 25%, H ≈ 30% Wiederherstellung.
- Höhere Stufen schneiden die Kapazität — bei Version 1 enthält H weniger als die Hälfte der Bytes, die L enthält.
- Kürzere Nutzlasten schlagen stärkere Korrektur; kürze URLs, bevor du die Stufen anhebst.
- Gestalte die Druckgröße mit der 10:1-Distanzregel und beschneide niemals die Ruhezone von 4 Modulen.
- Logo-Überlagerung ⇒ Stufe H, Logo unter ~30% der Fläche, zentriert, auf billigen Telefonen getestet.
Generiere ein paar Varianten mit dem QR-Code-Generator und die richtige Stufe für deinen Anwendungsfall wird innerhalb von fünf Minuten offensichtlich sein.