QR & barcodes

Making QR Codes That Scan: Error Correction Levels, Print Size and Barcodes

QR codes are on flyers, business cards, menus and packaging—but printed codes that phones struggle to read are surprisingly common. Here is how to create codes that scan first time.

How a QR code is built

The QR code was developed in 1994 by Denso Wave in Japan to track car parts and is standardised as ISO/IEC 18004. The three large squares in the corners (finder patterns) let scanners read it quickly from any angle.

Sizes range from version 1 (21×21 modules) to version 40 (177×177). The more data you store, the higher the version and the denser the dots. The largest version holds up to 7,089 digits or 2,953 bytes of general data.

Error correction levels L, M, Q and H

QR codes use Reed–Solomon error correction, so they can be read even when partly covered or dirty. There are four levels, defined by how much damage can be recovered.

  • L: about 7%. Holds the most data.
  • M: about 15%. The usual default.
  • Q: about 25%. Outdoor prints and rough surfaces.
  • H: about 30%. When placing a logo in the middle.

A higher level makes the same content denser, so H is not automatically better. For a clean indoor print without a logo, M is enough—and its larger dots often scan more reliably.

Shorter content scans better

Data length has the biggest effect on scannability. A 200-character URL full of tracking parameters and a 30-character URL printed at the same size have very different dot sizes, and on small prints the long one often fails.

Point the code at a short path on your own domain (for example example.com/m) that redirects to the full address. As a bonus, you can change the destination after printing. Percent-encode URLs containing spaces or non-English characters so every scanner app interprets them the same way.

Print size and quiet zone

A common rule of thumb is a code width of about one tenth of the scanning distance. Business cards and flyers scanned at 30 cm need at least 2–3 cm; a poster viewed from 2 m needs around 20 cm. In tight spaces, shortening the content matters as much as enlarging the code.

The white margin around the code (the quiet zone) is essential; the standard asks for four modules. Borders or graphics pressed against the code reduce recognition sharply. For print, export a vector format such as SVG so it stays sharp at any size.

Why codes fail to scan

Because people cannot see where a QR code leads before scanning, codes are sometimes abused for phishing. Printing the destination domain next to a public QR code helps build trust.

  • Low contrast: use dark modules on a light background; avoid pale grey or pastel modules.
  • Inverted colours: light modules on a dark background confuse some scanners.
  • Oversized logos: a logo beyond the error-correction budget breaks the code. Keep it under about 20% of the area even at level H.
  • Gloss and curves: lamination glare and curved surfaces such as bottles hinder scanning.
  • No testing: scan the proof with several phones at the real distance before printing.

How QR differs from linear barcodes

The striped barcode on retail products is a one-dimensional code. EAN-13 uses 13 digits: a GS1 prefix (880 for Korea), company and product numbers, and a check digit. These numbers are issued by GS1, so you must not invent them for products sold in shops.

For internal uses such as stock control or event tickets, Code 128 is convenient because it encodes letters and digits freely. With the AIBIZAP QR code and barcode generators you can create the right code for the job and download print-ready images.

Try it with these tools

More guides

All guides