Skip to content
ImageDoctor
Codes9 min read

QR codes and barcodes that actually scan

A code that scans on your monitor can fail completely on a printed label. Error correction, quiet zone, contrast and physical size decide it — and three of those are easy to get wrong while making it look nice.

Processed locally in your browser

Generating a QR code is trivial. Generating one that still scans after it has been printed at 2 cm on matte stock, under a shop's fluorescent lighting, by a five-year-old phone, is a different exercise. Most failures come down to four things: error correction, quiet zone, contrast and physical size.

How a QR code survives damage

A QR code stores its content in a grid of black and white modules, plus three large corner squares that a scanner uses to find the code and work out its orientation. Built into every code is a chunk of redundant data — error correction — which lets a reader rebuild parts it cannot see.

LevelRecovers aboutUse for
L7%Clean digital display, long content, no logo
M15%The default. Most printed material.
Q25%Codes with a logo, or on packaging that gets handled
H30%Large logos, harsh environments, small print

There is a real trade-off. Higher correction means more data in the same content, which means more modules, which means a denser code — and a denser code needs to be printed larger to scan at the same distance. Jumping straight to H is not free insurance.

Logos: how big is too big

A logo in the middle of a QR code covers modules. Error correction is what lets the code survive that, so a logo and level L together is a code that works on your screen and fails on paper.

  • Use level Q or H whenever there is a logo.
  • Keep the logo under about 20% of the code's width. The QR Code Generator estimates the coverage and warns before it becomes risky.
  • Give the logo a solid background pad so it sits in clean space rather than across half-visible modules.
  • Never cover a corner square. Those are how the scanner finds the code at all.

Quiet zone and contrast

The quiet zone is the empty margin around the code. The standard asks for four modules' worth, and it is not decorative: without it a scanner cannot tell where the code ends and the packaging begins. Designers remove it constantly to fit a layout, and it is one of the most common causes of a code that "just doesn't work".

Contrast matters just as much. Dark modules on a light background, with a real difference in lightness — not two mid-tones that look distinct on a calibrated monitor and identical under a warehouse scanner. Inverted codes (light modules on dark) are read by many modern phones but not by all dedicated scanners. If the code matters, keep it conventional.

How big to print it

The usual rule of thumb: a QR code should be roughly one tenth of the intended scanning distance. Scanned from 30 cm away, 3 cm wide. On a poster read from 3 m, 30 cm wide.

As an absolute floor, keep a QR code at least 2 cm wide for close-range scanning, and larger for dense codes. Shorten the content if you can — a shorter URL means fewer modules, which means each module is physically bigger at the same print size, which scans better. That single change fixes more failing codes than anything else.

Barcodes: pick the right symbology

"Barcode" is a family, not a format, and the right one depends entirely on what the scanner at the other end expects.

FormatEncodesUsed for
EAN-1313 digitsRetail products, worldwide
UPC-A12 digitsRetail products, North America
EAN-8 / UPC-E8 / 6 digitsSmall packaging
Code 128Letters, digits, symbolsShipping labels, SKUs, asset tags
Code 39Uppercase, digits, a few symbolsOlder industrial systems
ITF-1414 digitsOuter cartons and cases
MSI / PharmacodeDigitsShelf labelling, pharmaceutical packaging

Retail codes end in a check digit calculated from the digits before it — a built-in typo detector. Enter the digits without it and the Barcode Generator works it out; enter all of them and it confirms the digit, or tells you what it should have been. An EAN-13 rejected as invalid almost always means a mistyped digit rather than a broken tool.

Bar width, height and quiet zone

  • Bar width is the width of the thinnest bar. Everything else is a multiple of it, so it sets the whole scale. Too thin and printer bleed merges adjacent bars.
  • Bar height affects how easily a scanner can find the symbol at an angle. Very short barcodes need a steadier hand.
  • Quiet zone applies here too — a clear margin left and right. ImageDoctor never lets it fall below what the format requires.
  • Whole-pixel bars. Raster downloads keep bar widths to whole pixels so edges stay crisp instead of anti-aliasing into grey mush.

Hundreds of codes at once

  1. Bring in your dataUpload a CSV, a text file with one value per line, or JSON to Bulk QR or Bulk Barcodes — or type straight into the table. Up to 5,000 rows.
  2. Map the columnsChoose which column holds the content, and which fill the name, SKU or price. A column can even name the barcode format per row.
  3. Read the validation reportEvery row is checked before anything is generated: invalid URLs, content too long, bad check digits, duplicates. Fix, remove or skip — nothing is dropped silently.
  4. Generate and exportGeneration runs in background workers with a progress count, cancel and retry. Export a ZIP of PNG or SVG, one PDF per code, or a print-ready sheet.
  5. Lay it out for printingLabel Maker turns each row into a designed label; Print Sheets arranges them with crop marks and bleed.

Your spreadsheet is read in the browser. Product catalogues and customer lists never leave your device.

A pre-print checklist

  1. Content as short as it can be.
  2. Error correction Q or H if there is a logo, M otherwise.
  3. Logo under 20% of the width, with a background pad, corners untouched.
  4. Quiet zone intact — four modules for QR, the format's minimum for barcodes.
  5. Strong dark-on-light contrast.
  6. At least 2 cm wide, or a tenth of the scanning distance.
  7. Downloaded as SVG or PDF, or a raster at the right printed size and DPI.
  8. Tested on two real phones, and on a printed proof if it is going to print.

Common questions

No. They are static codes — the content is inside the pattern itself, with no redirect service in between — so they keep working as long as the content they point at exists.

Keep it at least 2 cm wide for close-range scanning, and larger for denser codes or longer distances. A useful rule is roughly one tenth of the intended scanning distance.

The logo covers modules the scanner needs. Raise error correction to Q or H, keep the logo under about 20% of the code's width, and never let it touch the three corner squares.

Either it does not have 12 or 13 digits, or the 13th digit does not match the check digit calculated from the first twelve. The error message shows the digit it should be.

No. Codes are generated entirely in your browser. Recent codes are remembered in this browser's own storage only, and you can clear that list at any time.

Tools in this guide

All guides