How QR Codes Actually Work: A Plain-English Explanation
A QR code looks like noise until you know what you're looking at — a grid of black and white squares that somehow turns into a working link the moment a camera points at it. The actual mechanism is more approachable than it looks, without needing any of the underlying math to understand what's going on.
It's a grid, and each square is one bit of data
At its core, a QR code is a grid of small squares called modules, each either dark or light. Read in the right order, that sequence of dark-and-light squares is binary data — the same 1s and 0s every digital file is ultimately made of — which gets decoded back into whatever was originally encoded: a web address, a phone number, a block of plain text. The glossary has a dedicated entry if you want the deeper technical breakdown of modules specifically.
The three corner squares are how a scanner finds the code at all
Look at any QR code and you'll notice three larger square patterns in three of its four corners (never all four — that asymmetry is intentional). These are finder patterns, and they're the first thing a scanner looks for — their specific proportions are unlikely to occur by accident in a normal photo, so a scanning app can pick them out of a cluttered background and use their positions to figure out the code's orientation, size, and any rotation or skew, before it even starts reading the actual data inside. More detail on finder patterns here if you want to go deeper.
Error correction — why a damaged or covered code can still scan
A QR code doesn't just encode your data once — it also encodes redundant error-correction information alongside it, following a standard called Reed-Solomon error correction. This is what lets a code with a logo covering its center, a torn corner, or some print smudging still scan successfully: the scanner reconstructs the missing or damaged parts using the redundant data elsewhere in the grid, the same general principle behind how a scratched CD can sometimes still play. Higher error-correction levels sacrifice some data capacity for more redundancy — this generator defaults to a high level for anything print-focused, specifically because print introduces more real-world damage risk than a code that only ever lives on a screen.
The quiet zone — the blank margin that isn't decorative
The plain white border surrounding a QR code isn't just spacing — it's a required part of the format called the quiet zone, and scanners use it to first detect where the code starts and ends against its background. Crop that margin away or place a code directly against a busy background with no border, and a scanner can struggle to even recognize there's a code there in the first place, regardless of how clean the code itself looks.
Static vs. dynamic — what actually changes after printing
Every code this site generates is static: once created, the destination link is permanently embedded in the printed pattern — nothing about it depends on an external service staying online. Some QR code systems instead generate a code linking to a redirect service, where the code stays fixed but the destination it redirects to can be changed later, at the cost of depending on that redirect service continuing to operate indefinitely. This explainer covers static vs. dynamic in more depth if that distinction matters for your specific use case.
The short version
A QR code is a grid encoding your data in binary, with redundant error-correction data baked in so minor damage doesn't break the scan, three corner markers that help a scanner find and orient the code, and a blank quiet-zone margin that's functionally required, not decorative. None of that complexity is something you need to manage directly — the generator handles the encoding; understanding it just makes the "why" behind things like error-correction levels and quiet-zone spacing make more sense.