Skip to main content

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

Every QR code carries spare data so a reader can rebuild what a scratch, a smudge or a logo has covered. You choose how much spare data there is, from level L to level H. This guide explains what each level recovers, what it costs, and how to pick one.By QRCraftly · Published · 3 min read

The short answer

There are four levels: L, M, Q and H. Each one adds more spare data, so it can recover from more damage, and each one makes the code bigger for the same content. Use M for most printed codes, H when the code carries a logo or will be scuffed, and L only for short-lived codes on a screen.

What each level recovers

The four error correction levels
LevelCan restore up toGood for
L (low)About 7% of the code’s dataCodes shown on a screen, clean surfaces, the smallest possible code
M (medium)About 15%Most printed codes. A sensible default
Q (quartile)About 25%Codes that may get dirty or scuffed
H (high)About 30%Codes with a logo, rough surfaces, heavy wear

These percentages describe the share of the code’s data that can be rebuilt, and the share of the printed area that can be lost is not the same thing. Damage to the three large corner squares, or to the thin timing lines between them, can stop a code reading even when the total damage is small, because a reader needs those to find and straighten the code.

How it works, briefly

The code’s data is split into blocks, and extra blocks of check data are added using a method called Reed–Solomon error correction, which is also used in CDs and satellite links. If some squares are unreadable, the reader uses the check data to work out what they should have been. The more check data, the more it can fix, and the more space the check data takes.

What it costs

Spare data takes room. For the same content, a higher level needs a larger grid with more, smaller squares. A larger grid printed at the same width means smaller squares, which are harder to read from a distance. So a higher level is not always safer: past a point it trades damage tolerance for legibility.

Adding a logo

A logo in the middle covers part of the code, and the reader treats that part as damage. That is why codes with logos should use level Q or H, and why the logo should stay small and sit in the center, away from the corner squares. There is no safe percentage that works for every code, because it depends on the content and the grid, so test the result. QRCraftly’s logo QR code page sets a high level for you and shows a scan badge that warns you when the logo covers too much, and the QR code checker tests a finished picture.

Choosing a level

  • Plain code on a clean, flat surface: M.
  • Code with a logo, or on packaging, outdoor signage or anything handled a lot: H.
  • Code that will be scanned straight off a screen, where a smaller grid helps: L or M.
  • Unsure: M, then test a printed proof as described in printing a QR code that scans.

Sources