AllConvert

How QR codes actually work

A QR code is not a link to look up somewhere — the information is stored directly in the pattern of black and white squares. Scan one with no internet connection and your phone can still read the text or the web address inside it, because the data was never stored on a server. That single fact explains most of how they behave, including why a printed code does not expire on its own.

What the squares actually are

Each small square, called a module, is one unit of binary data — dark for one value, light for the other. A scanner reads the grid, reconstructs the bits, and decodes them into text, a URL, contact details or whatever was encoded. Because the payload lives in the pattern itself, the code works the moment it is printed and keeps working as long as the paper survives.

The anatomy of the symbol

The three large square targets in the corners are finder patterns. They let a scanner locate the code and work out its orientation, which is why you can scan one upside down or at an angle and it still reads. Smaller alignment patterns help the scanner correct for perspective when the code is photographed on a curved or tilted surface. Timing patterns — alternating rows of modules — let it count the grid, and a band of format information tells it which error-correction level and mask were used. Everything left over is the data region.

Versions and why short content scans better

QR codes come in versions, and a higher version simply means a denser grid with more modules and therefore more capacity. A short URL needs only a small, sparse code with large modules that a camera reads easily from across a room. A long URL forces a denser code with tiny modules that a phone has to get close and steady to resolve. This is the practical argument for keeping encoded links short: it is not about storage, it is about how easily the printed result scans.

Error correction, and the logo in the middle

QR codes use Reed-Solomon error correction, the same family of math that keeps CDs playable through scratches. It comes in four levels, L through H, recovering roughly 7 percent of the code at the low end up to about 30 percent at the high end. This is why a code still scans with a company logo pasted over the center, or with a coffee stain across one corner — the redundant data reconstructs what is covered. The trade-off is that higher correction spends modules on redundancy, so for the same content a high-correction code is denser. If you want to drop a logo in the middle, choose a higher level; if you want the sparsest possible code for easy scanning, choose a lower one.

Static vs dynamic codes

A static code contains its destination directly. Encode a URL and that URL is physically in the pattern — it cannot be changed after printing, but it also depends on nothing and no one. A "dynamic" code from a commercial service does something different: it encodes a short redirect URL on that company's domain, and the real destination is stored in their system. That is how those services let you edit the target after printing and show you scan statistics. The catch is real and worth stating plainly — your code stops working the day that service shuts down, changes its URLs, or you stop paying. A static code has no such dependency.

Printing and scanning that works

Where they work well, and one warning

QR codes are genuinely good for Wi-Fi credentials, contact cards, restaurant menus, event tickets and payments — anything where typing would be slow or error-prone. The warning is the flip side of their convenience: a code hides its destination behind an image, so you cannot see where it leads until you have already scanned it. Codes stuck onto public surfaces — parking meters, posters, flyers — are a known phishing vector for exactly this reason. Treat an unknown code the way you would treat an unknown link.

To make your own, the QR code generator builds a static code from any text or URL directly in your browser, and because it runs locally, whatever you encode never leaves your device. For everything else, the main converter covers file conversions.