All posts

How big should a QR code be? The actual math

8 min readPrintingReliability

30 cm1 m3 mDISTANCE ÷ 10 = MINIMUM WIDTH

“How big does the code need to be?” is the most-asked question in QR printing, and most answers are a table copied from another table. The real answer is two short rules and one trap — small enough to do on a napkin, and worth understanding because your artwork, not an average, decides the number.

Rule one: the 10:1 distance ratio

A QR code scans reliably up to roughly ten times its printed width. Flip it around: take the furthest distance a real person will scan from, divide by ten, and that's your minimum width. A table stand scanned at 60 cm wants 6 cm of code. A poster read from a metre and a half wants 15 cm. The ratio is conservative for modern phone cameras — which is exactly what you want, because your scanner is not the newest phone in the room, it's the oldest.

30 cm — in hand≥ 30 mm60 cm — tabletop≥ 60 mm1.5 m — poster≥ 150 mm3 m — banner≥ 300 mmSCAN DISTANCE ÷ 10 = MINIMUM PRINT WIDTH
The 10:1 rule across the common cases. Design for the furthest realistic scanner, not the closest — the person deciding whether to walk over is the scan you lose first.

Rule two: the module floor

Distance isn't the only bound. The sensor ultimately has to resolve individual modules — the little squares — and a printed module below about half a millimetre starts dissolving into ink spread and paper texture regardless of how close the phone gets. So the minimum size is also module count × 0.5 mm. A 25-module grid plus its quiet zone is 33 units: floor of ~17 mm. A dense 45-module vCard grid: ~27 mm, before distance even enters.

The trap: your content sets the module count

Here's what the copied tables miss: QR grids grow in fixed steps called versions, and the amount of data you encode decides the version. Cross a data threshold by one character and the grid jumps — more, smaller modules at the same print size.

https://go.qr-m.in/aB3xY9z26 chars25×25 — every module largerhttps://link.example/aB3xY9z28 chars — over the boundary29×29 — 14% smaller modules
The boundary in action at identical print size: 26 encoded characters keeps a 25×25 grid; 28 characters forces 29×29, shrinking every module 14% — a real loss of scan distance for two characters of URL.

This is why URL length is a print-quality decision, not a cosmetic one, and why our own short domain is exactly 26 characters with the slug. It's also why a vCard code that carries a whole contact card needs to print bigger than a URL code — the data is the size.

Error correction moves the answer too

Higher error correction stores more redundancy, which can push the grid to a higher version. Use standard (M) without a logo. With a logo, high (H) is non-negotiable — the logo is spending the damage budget — and the size floor rises accordingly. The choice is fine either way; the mistake is a logo at low correction, which trades print-size headroom for a code that dies at the first crease.

Do the arithmetic with your real content

  • The print-size calculator encodes what you type with the product's own library, counts the real grid, applies both rules, and tells you which one is binding.
  • Already have artwork? The scannability checker decodes it at shrinking sizes — the smallest size that still decodes is your measured margin, which beats any rule of thumb.
  • Printing at scale? Vector exports (SVG, PDF, EPS) from any generator here stay sharp at every size, so the billboard and the business card are one file.

And the final sanity check never changes: print one proof at final size, tape it where it will live, and scan it with the worst phone in the office from the real distance. Two minutes, and it has caught more reprints than every calculator combined.