What a QR code is actually doing, and how one can change after printing
What the dots mean, why contrast and fault tolerance decide whether a code scans, and how a printed code can change where it points.
- qr-codes
- printing
A QR code looks like decoration. It is actually a short piece of text, almost always a web address, written in an alphabet designed to be read by a camera across a room, at an angle, in bad light, off a poster that has been rained on.
Once you see it as writing rather than as a pattern, the decisions behind a good one stop being mysterious. Here is what the dots are doing, the choices we make when we draw them, and how a code printed on paper can still change what it does.
The dots are writing
Every QR code is a grid of small squares, and the grid encodes text. The three large squares in the corners are not data. They are how the camera finds the code and works out which way up it is. Everything else is the message, plus some very deliberate redundancy.
The grid comes in fixed sizes. The shortest messages fit a grid of 21 squares a side, and each step up adds four more. The more you make a code say, the denser it gets, and the denser it gets, the closer someone has to stand. A code that holds a short address scans from across a shop. One that holds a whole paragraph needs the phone brought right up to it.
That is the first decision, and it is made before anything is drawn: keep what the code says short, so the printed square stays coarse enough to read from where your reader is actually standing.
The part that forgives damage
QR codes carry error correction, extra information woven through the grid so that a scanner can reconstruct the message when part of the picture is missing. It is the same idea that let a scratched CD keep playing.
How much of the picture can be lost is a choice. The standard offers four levels, from roughly seven percent of the code up to thirty. Higher tolerance is not free: the redundancy has to live somewhere, so the grid gets denser, and a denser grid scans from a shorter distance.
Where the code will live should decide the level. A code on a screen lives a charmed life and can afford the lightest one. A code on a shop window, a market stall or a delivery van gets scuffed, folded, taped over at one corner. It earns its keep in the middle levels. We default to a middle level for exactly that reason, and let you turn it up when the poster is going somewhere rough.
Colour is not decoration either
A phone does not read a QR code in colour. It flattens what it sees to light and dark, then decides, square by square, which is which. Two things follow from that.
The first is that contrast decides everything. A tasteful pale grey code on a white card is a code that does not scan, and it fails only out in the world, on somebody else's phone, where you never see it happen. Our tool measures the contrast between the two colours you pick and refuses the pairs that would not survive. It tells you in words instead of drawing you a dud.
The second is that dark squares on a light background are the safe direction. Plenty of scanners assume the marks are darker than what surrounds them, so an inverted code works on some phones and not others. If a design really wants light on dark, test it on more than one phone before printing a thousand of anything.
And the pale border around every code is part of the code. It is how the camera finds the edges. Cropping it, or laying the code over a busy background, is the most common way a perfectly good code becomes unscannable in a design tool at the last minute.
Fixed codes: the picture is the message
The simplest kind of code bakes the text straight into the picture. Our tool calls these fixed. They need no account, they cost nothing, and they never depend on us. The address is in the dots themselves, so the picture you download keeps working whether or not we exist. Print it, and it does what it says, forever.
The price of that permanence is that it cannot change. A fixed code pointing at last season's menu points there for as long as the poster hangs.
Editable codes: the picture is a pointer
An editable code prints differently on purpose. The dots do not contain your content. They contain a short permanent link that we keep, and that link sends every scanner on to whatever you have set it to. Change the destination and every printed copy changes with it, because the paper never knew the destination in the first place.
That indirection is what you are actually getting: paper you never have to reprint, an off switch for a code that escapes into the world, and a scan count, with when and what kind of device, because every scan passes somewhere that can count it.
Why editable needs an account
A fixed code is a picture. An editable code is a promise: a link on our domain that has to answer correctly for as long as your poster exists.
A promise needs an owner. Somebody has to be the only person allowed to change where the code points, because a poster that anyone could redirect would be worse than no poster. Somebody has to hold the off switch, and somebody has to be the person the scan history belongs to. An account is simply where that ownership lives.
It is also why we will not show you a picture before the code exists. The moment a QR code is on your screen it can be screenshotted and printed, so the only codes we ever display are ones that already scan to something real. Your editable code's picture appears at the moment it is saved. From then on, that exact picture is yours to print, however often its meaning changes.
Choosing between them
- The address will never change, and you want zero dependence on anyone: fixed.
- The destination might change, the poster is expensive to reprint, or you want to know how often it is scanned: editable.
- Either way: keep the content short, keep the contrast high, leave the border alone, and print it at least two centimetres across.
The dots are mathematics, and the mathematics is settled. All the decisions that matter are human ones. What should the code say, where will it live, and which do you want to last: the paper, or the link?
If the answer is the link, that choice has its own costs and its own small print. We walk the whole decision in the complete guide to dynamic QR codes.