Skip to content

Guide

Error correction L, M, Q, H: which level for what?

Besides its content, every QR code carries extra check data. With it, the code can still be read when part of it is dirty, scratched or covered. How much of it comes along is set by the error correction level.

Last updated:

What error correction does

A QR code does not store its content just once. The actual data comes with check data, calculated using the Reed-Solomon method, the same principle that let CDs survive scratches. If part of the data is missing or misread during scanning, it can be recalculated from the rest.

The standard defines four levels:

LevelRecoversSuits
Labout 7%screens, very long content
Mabout 15%paper indoors, business cards, flyers
Qabout 25%outdoors, stickers on machines, workshop and warehouse
Habout 30%harsh environments, codes with something on top

The percentages refer to the data, not to the area. So “30 per cent” does not mean you can cover up almost a third of the code. More on that below, under logos.

The price: more modules

The check data takes up space. The higher the level, the more modules the same content needs, and the larger the code has to be printed. Here is how that plays out in two examples:

Modules per side by level
ContentLMQH
Short link, 28 characters25292933
Long link, 100 characters37414957

For the long link, level H makes each side a good half as long again as level L. Read from one metre, the calculation in the article How big does a QR code need to be? puts that at just under 23 centimetres instead of 15 for the pattern, not counting the quiet zone. Our generator shows below the preview how many modules your code has. Switch the level under “Appearance” and you see straight away what it costs.

Which level for what

  • M is the right choice for almost everything that ends up on paper indoors, which is why it is our default. It forgives a smudge or a crease without bloating the code unnecessarily.
  • Q pays off wherever the code takes some punishment: on machines, shelving, vehicles, outdoors. Dust, scratches and fading colour eat their way into the pattern from the edges.
  • H is for special cases. For instance when a code hangs outdoors permanently and space is no issue, or when part of it is deliberately covered.
  • L only fits where nothing can get damaged, that is on screens, and for very long content where every module counts.

A higher level does not make up for a print that is too small. It helps against damage, not against a lack of resolution. If a code is not recognised from a distance, it needs to get bigger, not tougher.

And logos in the middle?

Many codes carry a company logo in the middle. That works because the scanner treats the covered modules as errors and recalculates them from the check data. But there are three catches:

  1. The logo uses up the reserve. The correction has to cover all damage combined. If the logo already takes a good share of it, a single scratch or reflection is enough to make the code unreadable.
  2. Not every spot is equal. The three large squares in the corners and the timing lines between them are not part of the data, so error correction cannot replace them. Without them the scanner will not even find the code. In codes with 45 to 69 modules per side there is also a small alignment pattern right in the centre, which helps the scanner straighten out codes held at an angle.
  3. The percentages are not an area. How much area a logo may cover depends on how the data is spread across the pattern. You cannot tell that from the outside.

If you still want a logo in the code: choose level H and keep the logo as small as possible, as a rough guide no more than a tenth of the area, with a light border around it. Then test on several devices, older ones included. The more robust solution is almost always to put the logo next to the code rather than inside it.

That is why qrmacher.de deliberately does not offer logos in the code. They reduce readability, and the codes then fail where you are least likely to notice: in print, after weeks, in poor light.

For bank transfer codes the level is fixed

For bank transfer codes, also known as GiroCode or EPC QR code, the European Payments Council’s standard prescribes level M. Our generator therefore locks it in as soon as you choose the “Bank transfer” type. More on this on the QR code for bank transfers page.

In short

  • M for paper indoors, which is almost always right.
  • Q for outdoors and for anything that gets handled, scratched or dirty.
  • H only with good reason, and then print larger.
  • A higher level is no substitute for sufficient size.
  • Test before printing, all the more so with a logo.

Advertisement

More from the guide