Skip to content
LinkQRPro
Basics · 6 min read

How QR Codes Work: Error Correction and Data Explained

Look under the hood of a QR code: how data is encoded, how error correction lets damaged codes still scan, and what the version and mask really mean.

Published January 14, 2026 · LinkQRPro

A QR code looks like random noise, but every square is deliberate. Understanding the structure helps you make codes that scan reliably — especially when you add a logo or print at a small size.

Encoding: turning content into modules

When you enter text or a URL, the encoder converts it into binary and arranges it into the grid of black and white squares called modules. QR codes support several encoding modes — numeric, alphanumeric, byte and kanji — and pick the most efficient one for your content. Shorter, simpler content produces a smaller, denser-looking pattern that is easier to scan.

Versions and size

QR codes come in 40 “versions,” from Version 1 (21×21 modules) up to Version 40 (177×177 modules). The more data you store, the higher the version and the more modules appear. That is why a code holding a long paragraph looks far busier than one holding a short link.

Error correction: why damaged codes still work

QR codes use Reed–Solomon error correction, which adds redundant data so a code can be read even if part of it is missing or obscured. There are four levels:

  • Level L (Low) — recovers about 7% of data. Densest, least resilient.
  • Level M (Medium) — about 15%. A good default for screens and clean prints.
  • Level Q (Quartile) — about 25%. A solid choice for real-world use.
  • Level H (High) — about 30%. Best when adding a logo or printing on rough surfaces.

This redundancy is exactly what lets you place a logo in the center of a QR code: the scanner reconstructs the covered data from the surrounding modules. The trade-off is that higher error correction makes the code denser, so balance resilience against size.

Masking and the quiet zone

Encoders apply a “mask” pattern to avoid large blank areas or misleading shapes that could confuse a scanner, choosing whichever mask gives the most even distribution. Around every code sits the quiet zone — a blank margin at least four modules wide. Cropping it too tightly is one of the most common reasons a code fails to scan.

When you generate a code with LinkQRPro, you control the error-correction level and the margin directly, so you can tune both resilience and scannability for your use case.

Try the tools

More guides