QR Code Standards, Error Correction, and Why Your QR Code Might Not Scan
By Marcus Vane · October 12, 2026 · Developer Tools
A QR code is not a single format but a family of versions with built in error correction. Understanding the levels and capacity limits explains why some codes scan reliably and others fail.
QR codes look like a single technology, but they are a family of forty versions, each with a different capacity, and four error correction levels that trade data space for resilience. The combination you choose decides how much the code can hold and how much damage it can survive. Most scanning failures come down to a mismatch between the content, the error correction level, and the conditions in which the code is read, rather than any fault in the scanner.
In this article:
- How a QR code encodes data
- Versions and capacity
- The four error correction levels
- Worked examples choosing settings
- Why QR codes fail to scan
- Common mistakes
- FAQ: QR code edge cases
- Wrapping up
How a QR code encodes data
A QR code is a two dimensional matrix of black and white modules. It encodes data in several modes: numeric, which is most efficient for digits; alphanumeric, which covers uppercase letters, digits and a few symbols; byte, which handles full text; and kanji. The mode chosen affects how much data fits in a given version, because numeric mode packs roughly three digits into ten bits while byte mode uses eight bits per character. Choosing the right mode for the content is the first capacity saving.
Versions and capacity
QR codes come in forty versions, numbered from one to forty, each larger than the last. Version one is twenty one by twenty one modules and holds a maximum of about seventeen numeric or twenty five alphanumeric characters at the lowest error correction. Version forty is one hundred and seventy seven by one hundred and seventy seven modules and holds thousands of characters. As the version rises, the code becomes denser and harder to scan at small physical sizes, which is why the smallest version that holds the data is usually the best choice.
The four error correction levels
Each QR code carries error correction data based on Reed Solomon coding, allowing the code to be read even when part of it is damaged or obscured. There are four levels. Level L restores about seven percent of lost data, level M about fifteen percent, level Q about twenty five percent, and level H about thirty percent. Higher correction means more resilience but less capacity for the same version, because more of the modules are spent on redundancy. A code placed on a clean printed card needs little correction, while one etched on a tool or printed on packaging that will be scuffed needs more.
Worked examples choosing settings
Example one: a URL on a poster
A short link of about twenty characters fits in version one or two at error correction level M, producing a small, easily scannable code. Because the poster is a clean surface, level M is sufficient and keeps the code compact. A longer tracking URL of sixty characters needs a higher version, which means a larger physical code to remain scannable at distance.
Example two: a vCard on a business card
A contact card with name, phone, email and address may run to two hundred characters, requiring a version around ten or higher. At level M the code is moderately resilient; at level H it is more robust but noticeably denser, which on a small business card can make it hard to scan if printed too small. The trade is between resilience and physical size.
Example three: a code on industrial packaging
A serial number etched or printed on packaging that will be handled and scuffed benefits from level H correction, which tolerates up to thirty percent damage. The code is larger for the same data, but it survives the conditions it was made for, which is the point.
Why QR codes fail to scan
- The code is printed too small for its density. A high version code shrunk to fit a small space has modules too fine for a camera to resolve.
- Poor contrast between the dark and light modules. A code printed in dark grey on light grey may look fine to a person but fail a scanner.
- Damage or obscuration exceeding the error correction capacity. A level L code with ten percent of its area damaged cannot be read.
- Reflective surfaces causing glare that washes out part of the code, common on laminated or glossy prints.
- The code is placed on a curved surface, distorting the grid the scanner expects to be square.
- Quiet zone violation. The blank margin around the code is part of the standard, and encroaching text or graphics break detection.
Common mistakes
- Maximising error correction without accounting for the larger physical size it requires.
- Using byte mode for purely numeric content, which wastes capacity and raises the version unnecessarily.
- Placing the code without a quiet zone, the mandatory blank border.
- Printing the code at low resolution so the modules blur into each other.
- Embedding a very long URL when a short redirect would do, forcing a dense, hard to scan code.
- Assuming any scanner reads any code. Older scanners may not support the largest versions or the newest formats.
FAQ: QR code edge cases
Can a QR code contain a logo in the middle?
Yes, if the error correction level is high enough to cover the area the logo obscures. Level H can tolerate around thirty percent damage, which is usually enough for a small centred logo, but the logo must stay within that budget or the code becomes unreadable.
Do QR codes expire?
The code itself never expires, but if it encodes a URL, the destination at that URL can disappear. A code pointing to a short link you control lets you change the destination without reprinting the code.
How small can a QR code be printed?
It depends on the version and the print resolution. As a rule, each module should be at least a few tenths of a millimetre, so a denser version needs a larger physical area. Test the printed size with a real phone before committing to a print run.
Wrapping up
A QR code is a balance of content, version, error correction and physical size. Pick the smallest version that holds your data, choose the error correction level the environment demands, keep the contrast high and the quiet zone clear, and test the printed result with a real device. That is the difference between a code that scans first time and one that frustrates everyone.
Generate scannable QR codes with adjustable error correction.
Try the Favicon Generator tool.
SwiftMultiTool — free online tools for everyone. Home · Blog · About · FAQ · Contact