A QR code is a printed block of data. Not a link to data — the data itself, arranged as black and white squares that a camera can read from any angle.

That one fact explains everything else about them: why they work on a plane with no signal, why they are free, and why a printed one can never be changed.

The pattern is not random

Every region of a QR code does a job.

PartWhat it does
Three big corner squaresTell the camera where the code is and which way up it sits
Small square near the fourth cornerCorrects for the angle you are holding the phone at
Dotted lines between the cornersSet the grid spacing so the reader knows where each square falls
The area around the corner squaresStores the format: error correction level and mask pattern
Everything elseYour actual data, plus its error correction
The blank marginMarks where the code ends

The fourth corner has no big square on purpose. Three corners is enough to establish orientation, and leaving the fourth free means the reader can always tell a rotated code from an upside-down one.

How a phone reads one

  1. Find the three corner squares in the camera image
  2. Work out the code angle and correct the perspective
  3. Read the format information to learn the error correction level
  4. Unmask the grid and read the data squares in order
  5. Use the error correction data to repair anything unreadable
  6. Decode the result and act on it

The whole thing happens on the phone in a fraction of a second, with no connection involved. Only the last step — opening a link — needs the internet, and only because the link points somewhere.

What it can hold

A QR code grows in steps, called versions, from 21 × 21 squares up to 177 × 177. The largest version holds:

Content typeMaximum
Digits only7,089
Letters and digits4,296
Any text or bytes2,953

In practice nobody goes near those limits, because a code that dense needs a very good camera and a very large print. A typical link produces a code around 25 to 33 squares across, which is comfortable to scan at a few centimetres.

The trade-off is worth remembering: more data means more squares, and more squares means each one is physically smaller at the same printed size. That is the real reason short links scan better than long ones.

Damage does not break it

Some of the pattern is redundant on purpose. Depending on the level chosen when the code was made, between 7% and 30% of it can be unreadable and the code still decodes. That redundancy is why a coffee ring, a crease, or a logo in the middle does not stop it working.

Our error correction guide covers the four levels and when to change them.

Where it came from

QR stands for Quick Response. It was invented in 1994 at Denso Wave, a Japanese company supplying the car industry, because ordinary barcodes could not hold enough information about a part and had to be scanned square-on.

Denso Wave holds patents on it but chose not to charge for use of the standard. That decision is the reason QR codes are everywhere and free — there is no company you have to pay, and no service that can switch them off.

Static and dynamic

What we have described is a static code: the data lives in the pattern. That is what our generator makes, and it is why the codes here never expire and work offline.

A dynamic code is a static code containing a short link on somebody else's domain, which redirects to wherever you set. It can be repointed later, but only for as long as that service exists and is paid for. We cover the trade-off in can you edit a QR code after printing.

What a QR code is not

  • Not a tracker. The pattern is inert. It cannot know who scanned it. What can track you is the page it opens — see does a QR code track you.
  • Not encrypted. Anything in a code can be read by anyone who scans it. A Wi-Fi code is your password in picture form.
  • Not an app. It cannot install anything or run anything by itself.
  • Not editable. Printed is permanent.

Try it

The fastest way to understand the pattern is to watch it change. Open the generator, type a short word, and watch the grid as you keep typing — you will see it jump to a bigger version when it runs out of room.