Skip to main content
QR Solutions
FeaturesGuidesHow it worksFree generatorPricingContact
Sign inGet started
  1. Home
  2. Guides
  3. QR code error correction levels explained: L, M, Q and H

Guide

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

Every QR code generator has a setting called error correction, usually a choice of L, M, Q or H, and most people leave it where it is. It decides how much of a code can be dirty, scratched, covered by a logo or badly printed and still scan. Knowing what it does takes five minutes and saves reprints.

What error correction is

A QR code stores its content as a sequence of bytes, and then adds extra bytes computed from them with a Reed–Solomon code, the same family of mathematics that lets a scratched CD play and a deep-space probe be heard. The extra bytes let a scanner reconstruct a limited number of bytes it could not read. The pattern you see is the data and the correction bytes laid out together, which is why a code can lose modules anywhere, not just in one place, and still decode.

The four levels

  • L (low): about 7 percent of the code can be unreadable. The smallest code for a given content.
  • M (medium): about 15 percent. The default in most generators, including ours, and a sensible one.
  • Q (quartile): about 25 percent. For codes that will be handled, weathered or printed on rough material.
  • H (high): about 30 percent. For codes with a logo in the middle, and for anything that must survive real damage.
LMQH
The four levels and roughly how much of each code may be unreadable: L about 7 percent, M 15, Q 25, H 30. All four still scan; they differ in how much damage they absorb.

What a higher level costs

More correction means more bytes, and more bytes mean more modules. A code holding the same content at H has noticeably more modules per side than at L, so at the same printed size its modules are smaller and harder for the camera to resolve. That is the trade: H survives more damage per module but needs a bigger print to be read at all. For a long static address the difference is real. For a dynamic code, whose content is a short link of a few dozen characters, the code is small at every level and the difference hardly matters, which is one more reason to prefer a dynamic code for print.

LHLH
What the higher level costs. Left, a long static address: at H the code has many more modules than at L, so at the same size they are smaller. Right, a dynamic code's short link stays small at every level.

Which level to choose

  • On a screen, in an e-mail, on a slide: L or M. Nothing will damage it, and the smaller code is easier to read from a photo of a screen.
  • On paper that will be handled, mailed or stuck on a wall: M or Q. Creases and dirt are the normal case.
  • Outdoors, on packaging, on equipment, on anything that gets wet or scraped: Q or H.
  • With a logo in the middle, at any size and on any surface: H, and keep the logo to about a fifth of the code. The logo is damage you chose; the level has to cover it and the real damage still to come.
  • Printed very small, close to the two-centimetre floor: M, and resist H. At that size the extra modules cost more than the extra correction returns, unless there is a logo, in which case the code should be bigger anyway.

What error correction cannot fix

The level recovers modules the camera could not read. It does nothing about a camera that cannot find the code in the first place. The three large corner squares, the finder patterns, must be intact and visible; so must the quiet zone, the empty margin around the code. A logo, a sticker or a border over a corner square defeats any level. Low contrast is the same: if the whole code is pale grey on white, every module is uncertain, and no amount of correction helps. The level buys tolerance for local damage, not for a code that was wrong everywhere.

How to set it in QR Solutions

The generator defaults to M. From Starter, the level is a four-way switch, L, M, Q, H, in the advanced colour settings, next to the corner colours; it applies to PNG and SVG downloads alike, and the preview redraws when you change it, so you can see the code grow by a step. Set H when you add a logo. The level is part of the design, not of the destination: changing it later changes how the next download looks and leaves the code's redirect untouched.

Frequently asked questions

Which error-correction level is the default?

M, in QR Solutions and in most generators. It survives about 15 percent damage and keeps the code compact.

Should I always pick H to be safe?

No. H makes the code denser, which hurts small prints and screen photos. Pick H for logos and rough conditions, M for the rest.

Does a higher level make the code slower to scan?

Not noticeably. The decoding is instant; what slows a scan is a dense code printed small, which a high level makes slightly worse.

Can I change the level after the code is printed?

The next download will use the new level; printed copies keep the old one. A reprint is needed for them, as for any design change.

Does the level affect a dynamic code's destination?

No. It is part of the design. The destination is a separate setting and can be changed at any time without touching the design.

Read also

  • QR code with logo
  • Dynamic QR codes
  • Static vs dynamic QR codes
  • QR code size for print
  • How to add a logo to a QR code
  • Do QR codes expire?
  • All guides
  • Make a free code without an account

Share this page

Make your first dynamic code

Create a dynamic QR code on the Free plan and see it work before you decide on anything else. No card needed.

Start freeSee the plans
QR Solutions
QR Solutions — part of the Just-Solutions product family.
just-solutions.online
Product
PricingFree generatorBulk generation
Dynamic QR codes
Dynamic QR codesQR code trackingBulk QR codesQR code with logo
Company
How it worksContact
Legal
Terms & ConditionsPrivacy PolicyCookie Policy
© 2026 QR Solutions. All rights reserved.by Just-Solutions