Create

QR code guide

What a QR code is, which type to choose, how large to print it and why yours does not work. No marketing, with numbers you can check.

What a QR code is

A QR code is a two-dimensional barcode. Data is written as a grid of dark and light squares called modules. Unlike a classic barcode it is read in both directions, so it holds far more — up to several thousand characters.

The three large squares in the corners are finder patterns. A scanner uses them to locate the code and work out its rotation. That is why they need the most care in any design work: a code without recognisable finders is never found at all, even if the data is intact.

Which type to choose

A QR code contains only text. The fact that a phone offers to open a link or join a Wi-Fi network comes from the format of that text. The wrong format means an unreadable string instead of an action.

I wantFormatWhat the phone does
A web linkURLOffers to open the page
A Czech paymentSPDOpens the banking app prefilled
A euro paymentEPC069-12The same across the eurozone
A Slovak paymentPay by squareOpens Slovak banking apps
Wi-Fi accessWIFIOffers to join without typing the password
A contact cardvCard or MeCardOffers to save to contacts
An eventiCalendarOffers to save to the calendar
A product package codeGS1 Digital LinkLeads to a product page with batch and expiry
Payment formats differ by country. A Slovak bank cannot read the Czech SPD format and vice versa. When you enter an account number here, we pick the format from the IBAN and currency — and when the situation is ambiguous, you get both codes side by side.

How large to print it

The most common cause of a code that does not work. The rule is simple: one module must be at least 0.4 mm on paper. That gives the minimum size of the whole code.

VersionGridSmallest printSuitable for
121×2112 mmShort code, label
329×2915 mmShort address
433×3317 mmPayment without a message
641×4120 mmPayment with a message
1057×5727 mmContact card
1577×7736 mmLonger card with an address

These are values for ideal conditions: good printing, matte paper, decent light, phone within reach. In practice, allow a margin.

Decorative shapes need more room. Dots, diamonds and stars cover less area than a square, so their dark-to-light ratio is worse. We measured this by decoding and raise the recommended size accordingly — for some shapes up to 30 mm.

Error correction and logos

A QR code carries redundant data, which is how a damaged code still reads. The amount is chosen from four levels.

LevelDamage toleratedWhen to use
L7 %Clean print, no logo, want a small code
M15 %Everyday use
Q25 %Packaging, labels, outdoor use
H30 %Logo in the middle, risk of scratching

A higher level means a larger grid for the same content, and therefore a larger print. It is not free.

A logo in the middle

A logo covers part of the data, which is then reconstructed from the error correction. So when you add one, always raise the level to H.

A safe logo area is up to 20 % of the code. Beyond that, no margin is left for actual damage — and a code that works on screen but not on a printed mug is worse than none.

The quiet zone

There must be clear light space four modules wide around the code. Without it, a scanner cannot tell where the code ends.

This is the most overlooked requirement in the whole standard. A designer places the code tight against an edge or on a photo and then wonders why it fails. For a 33-module grid, four modules is about 12 % of the width on each side.

Colours and contrast

A code need not be black and white, but it must be contrasty. In practice: a luminance ratio of at least 4.5 : 1, and 5 : 1 for the finder patterns.

Static or dynamic

A static code carries the data in the image itself. It works forever, independent of any server, and nobody can see who scanned it. The downside: once printed, it cannot be changed.

A dynamic code carries only a short link to a server that redirects to the real destination. The destination can be changed without reprinting, and scans can be counted. The downside: it depends on that server staying up.

For payments, Wi-Fi or contact cards, always choose static. There is nothing to change, and no reason for the data to pass through anyone's server. Dynamic makes sense in printed advertising, where the destination changes per campaign.

Common mistakes

How to test a code

  1. Print it at actual size on an ordinary printer.
  2. Scan it with at least two different phones, ideally one Android and one iPhone.
  3. Try it from the distance at which it will really be scanned.
  4. Try it in poorer light, not just by a window.
  5. Check that exactly the right thing opened — not merely that something loaded.

If the code carries a payment, check the account number and amount in the banking app, not just that the form opened.

An on-screen preview is not a test. A display has different contrast, different resolution and no glare. A code that works in a browser can fail on paper.

What next

If you want to know how to spot a fraudulent code, read QR code security.

Last updated 1 September 2026.