All guides

How QR Codes Work: Modules, Error Correction and Versions

Published: 2026-08-31 · Updated: 2026-08-31

A QR code looks like noise, but it is a carefully structured grid. Understanding a few of its parts explains most of the practical advice you will read elsewhere: why the margin matters, why some colors fail, and what the “error correction” option does.

Modules and versions

Each black or white square is a module. The grid size is called the version: version 1 is 21×21 modules, and every version adds four modules per side up to version 40 (177×177). The generator picks the smallest version that fits your data, so a short URL becomes a sparse, easy-to-scan code while a long vCard becomes dense.

Finder patterns and the quiet zone

The three large squares in the corners are finder patterns. Scanners look for them first to locate and orient the code, which is why a QR code can be read upside down. Around the whole code sits the quiet zone, a blank margin of four modules. Without it, the scanner may fail to isolate the code from surrounding artwork or text.

Error correction: L, M, Q, H

QR codes use Reed–Solomon error correction, the same family of maths behind CDs. Part of the grid stores redundant data so that damaged or covered modules can be reconstructed. The four levels trade capacity for robustness:

  • L — about 7% of the code can be lost. Highest capacity; fine for screens.
  • M — about 15%. The usual default and a good balance for most uses.
  • Q — about 25%. Recommended for printed material that may get dirty or scratched.
  • H — about 30%. For small prints, outdoor use, or when you overlay a logo.

Higher levels make the code denser for the same content. If a code is going to be tiny, do not pick H by reflex — a sparser M code is often easier to read than a dense H code.

Static versus dynamic codes

The codes made by this generator are static: the URL, contact card or Wi-Fi details are encoded directly into the pattern. Nothing is stored on a server, there is no redirect, and the code can never expire. “Dynamic” QR codes point to a short link that a service can change later — convenient for tracking, but they stop working if the service disappears.

Takeaways

  1. Less data means a sparser code that scans more easily.
  2. Keep the quiet zone; do not crop the white margin.
  3. Use M for most things, Q or H for print that may get damaged.
Related toolTry the generator