· 8 min

QR error correction: L, M, Q, and H explained

What QR error correction levels are. When to use L, M, Q, or H, how they affect size, and practical tips so reading never fails.

If you've added a logo to a QR, tweaked contrast, or exported for print, you've come across the "error correction" or "ECL" setting. It's the technical property with the most impact on QR robustness. This guide explains the four levels, when to use each, and what happens when you choose wrong.

Quick answer

  • A QR can recover part of its content if damaged, dirty, or covered. The higher the error correction level (ECL), the more damage it tolerates.
  • Four levels fixed by the ISO/IEC 18004 standard:
    • L (Low): up to 7% damage.
    • M (Medium): up to 15%.
    • Q (Quartile): up to 25%.
    • H (High): up to 30%.
  • More correction = more modules per QR = denser QR (harder to read if very small).
  • Practical rule: use M by default for digital QR, Q for print, and H for QR with logo or hostile environments.
  • QRcito auto-raises to H if you upload a logo.

Why a QR tolerates damage

When a QR is encoded, it doesn't just store content (URL, text, WiFi…). It adds redundant bytes generated with an algorithm called Reed-Solomon.

Reed-Solomon is also used in CDs, DVDs, satellite transmissions, and NASA's deep-space data. The idea: if you lose some bytes, the redundant ones let you reconstruct the originals.

In a QR, that means: if part of the pattern is stained, torn, folded, or covered by a logo, the reader can recover the content as long as the damaged percentage doesn't exceed the chosen level's tolerance.

The four ECL levels

L — Low (7%)

Tolerates up to 7% damaged modules.

When to use it:

  • QR generated only for screen, high resolution, no predictable physical damage.
  • When you need to encode lots of information and minimize QR size (an L QR with the same URL is smaller than an H one).
  • Tutorials or demos where you only need it to scan under ideal conditions.

When not to use it: never for printing.

M — Medium (15%)

Tolerates up to 15% damaged modules. The reasonable default for most online generators.

When to use it:

  • QR for screen, web, social media use.
  • QR printed indoors, in good condition, without logo.
  • Business cards, flyers that won't suffer much.

Q — Quartile (25%)

Tolerates up to 25% damaged modules.

When to use it:

  • QR printed outdoors, in shop windows, displays exposed to dust or minor scratches.
  • Packaging that may be handled.
  • Any QR where the medium's contrast isn't optimal (slightly colored paper, vinyl on dark surfaces…).

H — High (30%)

Tolerates up to 30% damaged modules. Mandatory for QR with logo.

When to use it:

  • QR with logo in the center: covering the QR center with your brand consumes between 20% and 25% of modules. Without H, the reader fails.
  • QR in hostile environments: industrial (dirt, grease), outdoors with direct sun, high-rotation packaging.
  • Small QR with intensive use. Even when small size hampers reading, H correction partially compensates.
  • Hand-painted or engraved QR (jewelry, tattoos, ceramics).

How QRcito applies it: as soon as you upload a logo, ECL automatically becomes H. Full guide: QR with logo: step-by-step tutorial.

The trade-off: higher ECL = denser QR

Raising correction level adds redundant bytes. That increases total module count. Same-content comparison (URL https://qrcito.com/en/blog/wifi-qr-code/):

Level QR version Modules Relative visual size
L 4 33×33 100%
M 5 37×37 113%
Q 6 41×41 125%
H 7 45×45 138%

Implication: if you print at fixed size (say 3×3 cm), an H QR has individual modules 38% smaller than an L QR. If readers can't visually distinguish them, it fails even with high correction.

Rule: raising ECL only helps if physical size lets each module remain visible.

To understand minimum readable size: minimum QR code size guide.

What counts as "30% damage"

Not any linear 30%. Reed-Solomon protects against two error types:

  • Localized errors: portion of the QR erased, covered, or unreadable.
  • Random errors: individual modules misread (noise, low resolution, contrast).

The 30% of level H is shared. In practice, if you cover 25% rectangular area in the center (a square logo in the middle), the QR still works because the algorithm has margin for the few random errors that may occur.

Types of "damage" an H QR tolerates:

  • Logo in center up to 25% of area.
  • A bullet hole (literally, there are test videos).
  • Up to 30% surface stained, folded, or torn (as long as the three corner "eyes" are intact).
  • Partial reflections darkening a zone.

What no level tolerates:

  • That the three positioning patterns at corners (the "eyes") are damaged. Those squares are what the reader uses to align the QR and reconstruct the grid.
  • Extreme pixelation blurring individual modules.
  • Insufficient contrast (less than 3:1 between dark modules and background).

How to choose level by case

Outdoor poster, window, display

H if it has a logo, Q if not. Sun exposure, rain, dust, and potential tampering recommend the extra margin.

Restaurant digital menu

M indoors, Q outdoors. Indoor restaurant table with laminated QR: M is enough. Outdoor patio table exposed to sun and spilled coffee: Q gives margin.

Business card

M without logo, H with logo. Cards live in wallets, get bent. H is a buffer for those cases.

Product packaging and labels

Q or H. Packaging takes wear, transport, display handling. H if the QR includes brand logo (the norm).

Personal QR (vCard, WhatsApp)

M digital, H printed. If shown on phone screen, M is enough. Printed on a card, H protects against wrinkles.

QR on fabric (T-shirts, banners)

H always. Fabric has texture that disperses modules, folds distort, washing fades color.

Temporary QR on LED screen

H. LED screens have large, separated pixels; contrast degrades with ambient light.

QR for long-distance scanning (billboards, mass events)

Q or H + large size. Distance introduces blur errors and contrast drops with atmosphere.

How to verify ECL of an existing QR

Not trivial: ECL is encoded in the first bits of the QR (in the zone around the top-left "eye"). Some advanced readers (Zxing, professional tools) show it. The native iPhone/Android camera doesn't.

If you have access to the original generator, check the settings. If not, regenerate the QR with known content and compare visually with the original: same content, a larger QR (more modules) has higher ECL.

Myths and common mistakes

"The higher the ECL, the better"

False. Raising ECL increases visual size. For very small QR (≤1.5 cm printed), H level can be worse than M because individual modules become too small for the reader to distinguish.

"If I put the QR on glossy vinyl, I need H"

Depends. Gloss creates reflections that can cover zones of the QR temporarily. H helps, but the real solution is matte finish.

"ECL H protects against blurry QR"

Half and half. ECL helps against individual misread modules. But if the whole QR is blurred or pixelated, the reader can't even distinguish modules. ECL doesn't invent information, only reconstructs missing parts.

"A QR with ECL H takes anything"

Almost. What no level survives: damage to the three corner patterns (the "eyes") or lack of quiet zone (white margin around).

"To reduce QR size, drop to L"

Works, but think. If QR encodes short content (a URL of few characters), dropping to L saves modules. If it encodes a long vCard or WiFi with 64-character password, you're already at a high QR version and the difference isn't notable.

How to choose level in QRcito

QRcito has an explicit selector with four options (L, M, Q, H). Automatic logic:

  • Default: M for max compatibility.
  • If you upload a logo: auto-switches to H.
  • Manual: you can force any level from the dropdown.

Changing it doesn't affect other settings. Generate the QR, test with two phones (especially Android, usually stricter), confirm it scans in under 2 seconds, download.

How ECL affects "scannability score"

QRcito shows a badge with the generated QR's "scannability score". ECL is one factor. Others: contrast, size, content length, presence of logo.

A good score doesn't guarantee 100% reading, but indicates you've hit the right combination of parameters. If it drops, check: is logo too big? Is FG/BG contrast below 4:1? Is ECL incompatible with size?

Frequently asked questions

Can I change ECL after generating the QR? No. A static QR has its ECL baked in. To change it, you must generate a new one with the same content and another level.

Does raising ECL make the QR print better? Not directly. Raising ECL adds redundancy, but doesn't improve print quality. If your printer pixelates the edges, ECL won't fix it.

Is a QR with ECL L and one with ECL H encoding the same URL interchangeable? Yes in function (they point to the same place), no in visual pattern. They're two different images, with different modules.

Is there an "N" or higher level than H? No. H is the QR standard maximum. For more robustness, derivative formats are used (rMQR, microQR, Aztec code) with different use cases.

Does ECL affect scanning speed? Slightly. More modules = more data to read. In practice, the difference is milliseconds, imperceptible to humans.

In short

Four levels, one simple rule: M by default, Q for print, H if logo or hostile environment, L only if you need a small clean QR on screen. QRcito already handles this automatically; if you want to force the level, the dropdown is visible.

Generate your QR free, adjust ECL, test the result live: qrcito.com

← Back to blog