7 min leestijdTutorials

Foutcorrectieniveaus van QR-codes: L, M, Q en H uitgelegd

De foutcorrectieniveaus van QR-codes L, M, Q en H herstellen 7, 15, 25 en 30% van een beschadigde code. Zie het aantal modules per niveau en wanneer elk loont.

Marius Voß
DevRel · edge infra
De foutcorrectieniveaus L, M, Q en H van QR-codes als balken voor 7, 15, 25 en 30 procent herstel naast een echte QR-code

Foutcorrectieniveaus van QR-codes zijn de hoeveelheid redundante data die een code draagt zodat een scanner kan herbouwen wat is uitgesmeerd, bekrast of door een logo bedekt. Er zijn er vier: L, M, Q en H, die ruwweg 7%, 15%, 25% en 30% van de code herstellen. Kies M voor de meeste schermen en korte links, en H wanneer een logo of ruwe behandeling in de code gaat happen. De prijs van elke stap omhoog is dichtheid: meer modules, kleinere vierkantjes bij dezelfde gedrukte breedte.

Die afweging is waar de meeste verhalen van "mijn QR-code scant niet" beginnen, en daarom werkt deze tutorial met echte modulegetallen in plaats van met nattevingerwerk. Heb je nog geen code gemaakt, begin dan bij hoe je een QR-code maakt; dit artikel gaat over het kiezen van het niveau zodra je er een hebt.

Wat foutcorrectie in een QR-code eigenlijk doet

Een QR-code slaat je data op als bytes die codewoorden heten. Daarnaast slaat hij extra codewoorden op, berekend met Reed-Solomon-foutcorrectie, dezelfde familie wiskunde die op cd's wordt gebruikt. Als een scanner een beschadigde code leest, gebruikt hij die extra codewoorden om uit te rekenen welke datacodewoorden fout zijn en wat ze hadden moeten zijn.

Het niveau dat je kiest bepaalt hoeveel extra codewoorden er zijn. Denso Wave, dat het formaat uitvond, beschrijft de foutcorrectiefunctie als vier niveaus en merkt op dat een hoger niveau het herstel verbetert maar de hoeveelheid data vergroot, en dus de grootte van het symbool. De herstelcijfers hieronder zijn die uit ISO/IEC 18004 en herhaald in het QR-code-artikel van Wikipedia.

  • Niveau L (Low): ongeveer 7% van de codewoorden herstelbaar.
  • Niveau M (Medium): ongeveer 15%.
  • Niveau Q (Quartile): ongeveer 25%.
  • Niveau H (High): ongeveer 30%.

Let op het woord "ongeveer". Het percentage telt codewoorden, niet een vlek inkt. Zie het als een herstelbudget, niet als een schadegarantie.

De vier foutcorrectieniveaus L, M, Q en H van QR-codes met bij benadering 7, 15, 25 en 30 procent herstel en een typisch gebruik voor elk

De dichtheidsafweging: waarom hoger niet altijd veiliger is

Redundantie moet ergens wonen. Een hoger niveau duwt je data in een groter symbool. QR-codes bestaan in versies 1 tot 40, en de zijlengte is 17 + 4 x versie modules: versie 1 is 21 x 21 en versie 40 is 177 x 177, volgens de versie- en capaciteitstabel van Denso Wave. De encoder kiest de kleinste versie waarvan de capaciteit, op het gekozen niveau, je data past.

Voor URL's is die data tekst in bytemodus. Versie 2 bevat 32 bytes op L, 26 op M, 20 op Q en 14 op H. Versie 8 bevat 192, 152, 108 en 84. Versie 11 bevat 321, 251, 177 en 137.

De kosten zie je bij versie 8: 192 bytes op L, 84 op H. Hetzelfde raster, minder dan de helft van de ruimte voor je URL, want de rest is pariteit.

Waarom een dichtere code slechter scant

Een telefoon moet elke module onderscheiden. Druk de code 3 cm breed af en een raster van 33 modules geeft modules van ruwweg 0,9 mm; een raster van 61 modules geeft er ruwweg 0,5 mm. Dezelfde camera, hetzelfde licht, dezelfde trillende hand. De helft van de marge. De maatregels in hoe groot moet een QR-code zijn gaan uit van een redelijke modulegrootte, en dichtheid is wat die aanname stilletjes breekt.

Uitgewerkt voorbeeld: één URL op elk niveau

Dit is het experiment dat ik draai wanneer iemand zegt: "zet het gewoon op H". Ik nam een getrackte campagne-URL van 126 tekens: een domein, een pad en de parameters utm_source, utm_medium, utm_campaign en utm_content. Daarna nam ik een korte link van 25 tekens, https://s.elido.me/qr7kP2, als illustratief voorbeeld. Beide zijn bytemodus. Ik codeerde elk op alle vier de niveaus met een standaardencoder, en de capaciteitstabel hierboven voorspelt het resultaat.

NiveauHerstelURL van 126 tekensKorte link van 25 tekens
L~7%V6, 41 x 41V2, 25 x 25
M~15%V8, 49 x 49V2, 25 x 25
Q~25%V9, 53 x 53V3, 29 x 29
H~30%V11, 61 x 61V4, 33 x 33

Twee dingen vallen op. Ten eerste groeit de lange URL van L naar H van 41 naar 61 modules per zijde, dus van 1681 naar 3721 modules, ongeveer 2,2 keer het oppervlak. Ten tweede, en dit noemt niemand: de korte link op het sterkste niveau, H (33 x 33), is nog steeds kleiner dan de lange URL op het zwakste niveau, L (41 x 41).

Twee echte QR-codes op niveau H naast elkaar: een trackings-URL van 126 tekens met 61 bij 61 modules en een korte link van 25 tekens met 33 bij 33 modules, met een modulestabel voor alle vier de niveaus

De payload doet er meer toe dan het niveau. Je kunt het maximale herstelbudget van 30% voor een korte link kopen en eindigen met een ijlere, grovere code dan de "efficiënte" code op niveau L voor de lange URL.

Wanneer je H kiest, en wanneer L of M beter is

Stem het niveau af op wat er daadwerkelijk met de code gaat gebeuren. Voorzichtigheid in het algemeen is geen specificatie.

Kies H (of Q) wanneer

  • Een logo of merkteken in het midden staat. Het verbergt modules die de scanner moet herbouwen.
  • De code wordt gedrukt op verpakking, een flyer in een zak, een sticker, een tafel die wordt afgeveegd, of iets buiten.
  • Het oppervlak ruw of gebogen is en je de afwerking niet kunt beheersen.
  • Opnieuw scannen niet mogelijk is, zoals bij een code op een product dat al is verzonden.

Het helpartikel over QR-codes van Elido zegt hetzelfde: houd een logo onder 20% van het codeoppervlak, en schakel over op H wanneer je daarboven komt of met een logo drukt.

Kies L of M wanneer

  • De code op een scherm verschijnt: een dia, een webpagina, een bevestiging bij het afrekenen.
  • De URL kort is en niets hem zal bedekken of bekrassen.
  • De ruimte krap is en de code klein moet blijven, zodat elke module telt.

M is de praktische standaard. Denso Wave zegt dat het het meest gekozen niveau is, en ons eigen artikel QR-code scant niet maakt hetzelfde punt vanaf de supportbalie: H is de verkeerde standaard voor een gewone code, omdat de dichtheid die het toevoegt meer mislukte scans veroorzaakt dan de schade waartegen het beschermt.

Een waarschuwing over logo's: foutcorrectie herstelt ontbrekende modules, het lost geen slecht contrast, vervaging of een afgesneden marge op. De ontwerpregels voor het besteden van het budget aan een logo staan in ontwerp van QR-codes met merkidentiteit, inclusief waarom de drie hoekvierkanten onaangeroerd blijven.

Het uitgewerkte voorbeeld levert een regel op die je vandaag kunt toepassen: verklein de payload voordat je het niveau verhoogt. Een dynamische QR-code doet precies dat. In plaats van de volledige bestemming te coderen, codeert hij een korte link, en die korte link stuurt door naar waar je hem naartoe wijst.

Een korte link coderen heeft drie effecten op betrouwbaarheid:

  1. Het raster blijft op een lage versie, dus modules blijven groot bij elke afdrukgrootte.
  2. Je kunt niveau Q of H betalen voor een logo of drukslijtage zonder dat de code opzwelt.
  3. De trackingparameters wonen op de bestemming, niet in het patroon, dus een campagnetag wijzigen dwingt nooit tot een nieuwe, dichtere code.

Er is een vierde voordeel dat niets met dichtheid te maken heeft: omdat de code naar een korte link wijst, kun je hem later omleggen zonder opnieuw te drukken, en krijg je scantellingen cadeau. Bij een statische code is de bestemming in het patroon gebakken, dus de enige manier om een typefout te herstellen is opnieuw drukken.

Wil je dit met je eigen links proberen, dan laat de QR-codegenerator je het niveau per code instellen, met M als beginpunt, en de plandetails staan op de prijzenpagina. Maak er een op M en een op H van dezelfde korte link, druk ze af op 3 cm en vergelijk. Ik wed dat je ze met het blote oog moeilijk uit elkaar houdt, en dat is de clou.

Een korte checklist voordat je drukt

Doorloop deze op volgorde.

  1. Verkort eerst de URL; houd trackingparameters op de bestemming.
  2. Kies het niveau uit de tabel: M voor schermen en gewone druk, Q of H voor logo's en slijtage.
  3. Controleer de versie die je generator koos. Voorbij ruwweg versie 10 voor een URL: vraag je af waarom de payload zo lang is.
  4. Behoud de stille zone: minstens vier modules lege rand aan elke kant.
  5. Druk af op de definitieve grootte en scan met twee verschillende telefoons bij gewoon licht.

Stap 5 vangt op wat geen tabel voorspelt. Een logo dat er op het scherm klein uitzag, kan meer modules bedekken dan je zou denken.

Lees de cornerstone-reeks

Dit artikel staat in het tutorials-cluster, en de cornerstone is hoe je een QR-code maakt. Voor de regels over grootte en afstand die bepalen of je modulegrootte groot genoeg is, zie hoe groot moet een QR-code zijn.

Gerelateerd op de blog

Veelgestelde vragen

Wat is het beste foutcorrectieniveau voor een QR-code?

Niveau M is de verstandige standaard: het herstelt ongeveer 15% van de code en houdt het raster klein. Denso Wave, de uitvinder van het formaat, zegt dat M het meest gekozen niveau is. Stap over op Q of H wanneer de code een logo draagt of wordt gedrukt op iets dat bekrast, gevouwen of buiten gelaten wordt.

Wat betekent 30% foutcorrectie op een QR-code?

Het betekent dat een code op niveau H nog steeds kan worden gedecodeerd wanneer tot ongeveer 30% van zijn datacodewoorden onleesbaar of verborgen is. De code slaat extra Reed-Solomon-pariteitsdata op, en de scanner gebruikt die om te herbouwen wat ontbreekt. Het is een plafond voor herstelbare schade, geen belofte dat willekeurig 30% van het oppervlak weg mag.

Maakt een hoger foutcorrectieniveau een QR-code moeilijker te scannen?

Indirect wel. Hogere niveaus voegen pariteitsdata toe, dus dezelfde URL heeft een hogere versie nodig met meer, kleinere modules. Bij dezelfde gedrukte breedte zijn kleinere modules moeilijker te onderscheiden voor een telefooncamera. De oplossing is een kortere payload, niet een lager niveau op een code die de bescherming nodig heeft.

Heb ik niveau H nodig om een logo op een QR-code te zetten?

Gebruik H, of minstens Q, voor elke code met een logo in het midden. Het logo verbergt modules, en de scanner behandelt ze als schade die hersteld moet worden. Houd het logo ruim onder een kwart van het codeoppervlak en weg van de drie hoekvierkanten, zodat slijtage in de druk nog budget overhoudt.

Kan een beschadigde QR-code nog worden gescand?

Vaak wel, binnen de limiet van het niveau. Een bekraste, uitgesmeerde of gedeeltelijk bedekte code decodeert als het verloren gebied binnen blijft wat het niveau kan herstellen en de hoekvierkanten intact zijn. Een code op niveau L verdraagt ongeveer 7% schade, een code op niveau H ongeveer 30%.

Wat is het standaard foutcorrectieniveau van een QR-code?

De specificatie kent geen enkele standaardwaarde; elke generator kiest er zelf een, en M is de meest gangbare keuze. De QR-playground van Elido begint op M, met L, Q en H beschikbaar via hetzelfde bedieningselement.

Probeer Elido

Plak een URL, krijg een werkende korte link

Geen aanmelding nodig. Link blijft 30 dagen actief. Meld je aan om hem voor altijd te bewaren.

Gratis, geen aanmelding nodig · 2 per dag

Probeer Elido

In de EU gehoste URL-shortener met aangepaste domeinen, uitgebreide analyses en een open API. Gratis abonnement - geen creditcard nodig.

Tags
qr code error correction levels
qr code error correction
qr code level h
qr code version
reed-solomon qr code
qr code density

Verder lezen