Error correction level: why the highest is usually worse
By Tiehl Roberto Matías · 6 min read · Updated 26 October 2026
The four error correction levels of the QR standard are the least understood option in the format. Intuition says more is always better. In 3D printing it is exactly the other way round, and there is a specific reason for it.
What it actually is
A QR code does not only store your information: it also stores redundant data calculated from it, using an algorithm called Reed-Solomon. The same algorithm is used in CDs, and for the same purpose: so the content can be reconstructed even with part of it damaged or covered.
The standard defines four levels, and each reserves a different share of the code for that redundancy:
| Level | Name | Damage tolerated |
|---|---|---|
| L | Low | ~7 % |
| M | Medium | ~15 % |
| Q | Quartile | ~25 % |
| H | High | ~30 % |
It is what lets a code with a coffee stain, a scratch or a logo on it still read.
What it costs
That redundancy takes up room, and room in a QR code is finite. The higher you push the level, the less information fits in the same version:
| Version | Modules | L | M | Q | H |
|---|---|---|---|---|---|
| 1 | 21 × 21 | 17 | 14 | 11 | 7 |
| 2 | 25 × 25 | 32 | 26 | 20 | 14 |
| 3 | 29 × 29 | 53 | 42 | 32 | 24 |
| 4 | 33 × 33 | 78 | 62 | 46 | 34 |
| 5 | 37 × 37 | 106 | 84 | 60 | 44 |
| 6 | 41 × 41 | 134 | 106 | 74 | 58 |
| 8 | 49 × 49 | 192 | 152 | 108 | 84 |
| 10 | 57 × 57 | 271 | 213 | 151 | 119 |
Look at version 3: going from L to H cuts the capacity from 53 characters to 24. Less than half.
The 3D printing paradox
Here is the point almost nobody explains. Take a 40-character link and a piece 40 mm a side, with a 0.4 mm nozzle.
| Level | Version needed | Modules | Module size | Printable? |
|---|---|---|---|---|
| L | 3 | 29 × 29 | 1.08 mm | Yes, comfortably |
| M | 3 | 29 × 29 | 1.08 mm | Yes, comfortably |
| Q | 4 | 33 × 33 | 0.98 mm | Yes |
| H | 5 | 37 × 37 | 0.89 mm | Tight |
The module comes from dividing the 40 mm between the modules of the code plus the eight of the quiet zone. And there is the problem: raising it to H so the code «holds up better» makes each module print worse. You have bought tolerance to outside damage and paid for it with print quality, which is where the damage comes from in the first place.
The redundancy is not free twice over. Part of the correction capacity is already being spent compensating for the noise of printing itself: rounded edges, a widened first layer, small variations in colour. If on top of that you shrink the modules, you raise that baseline noise and have less margin left for real damage. The high level eats itself.
When to use each level
M is the default answer
For 90 % of printed pieces. A 15 % tolerance covers normal wear, scratches and dirt with room to spare, without forcing the version upwards.
Go up to Q or H only in these cases
- The code carries a logo or an emoji in the middle. There you really are covering modules, and the redundancy is needed. With a logo, H is not optional.
- The piece is going to take a beating. A keychain on a bunch of keys, a plate in a workshop with grease and swarf.
- The piece is large. On a 150 mm plate the modules are enormous anyway, so going up a version costs nothing. There H is free.
L almost never
It only makes sense when the link is long, the piece is small and there is no way to shorten the address. It beats a high-version code with modules that barely print, but it is an emergency measure: the good answer is to shorten the link.
The rule in one line
Raise the correction level only if the piece is big enough to absorb the extra version without the module dropping below twice your nozzle.
And if it is not, the right lever is not the level: it is shortening the link. Taking off ten characters usually drops a whole version, and that enlarges the modules without giving anything up.
A note on masks
While we are here: the standard defines eight mask patterns applied over the code to avoid large areas of the same colour, which are what confuse the reader. The encoder picks the best of the eight automatically by scoring each one against rules in the standard.
There is nothing to configure, but it explains a detail that catches the eye: if you generate the same link twice at different levels, the pattern changes completely even though the content is identical. It is not a bug: it is another version and another mask.
Compare the four levels on screen
The generator lets you change the correction level and see the module count change immediately. With that you can decide on data instead of on intuition.
Try the levelsKeep reading
- What it costs to 3D print a QR codeThe grams of each piece measured with the site's engine, how many come out of a spool, and how much of the cost is electricity.
- How to open the 3MF in each slicerWhat is exactly inside the file and what to touch in each program so both colours come out.