How QR Codes Work (and How to Make One That Actually Scans)

Updated September 12, 2026

Just need the tool?QR Code Generator โ†’

Cover the center of a QR code with your logo and it will very likely still scan. That isn't luck. QR codes carry up to about 30% redundant data, so a chunk can be missing, smudged, or hidden and a phone still reads the whole thing. That single design choice โ€” baked in since 1994, when Denso Wave built these to track car parts on an assembly line โ€” explains most of what makes a QR code work or fail.

Here's what's actually going on, and how to make one that scans on the first try instead of the fifth.

What a QR code actually stores

A QR code is not a link. It's a container for a short string of text, and the scanning app decides what to do with that text based on how it's formatted. Point your camera at one and the phone reads the string, recognizes a pattern, and offers an action.

Common payloads:

The format is a convention. WIFI: at the front tells the app it's a network. BEGIN:VCARD tells it it's a contact. Get one character wrong in that structure and the phone treats the whole thing as plain text.

The practical point: the less you cram in, the better. More characters means more dots (called modules), which means a denser, harder-to-scan grid. A 20-character URL makes a clean, forgiving code. A 300-character URL stuffed with tracking parameters makes a dense mess that phones fumble.

Why a damaged code still scans

QR codes use Reed-Solomon error correction โ€” the same math family that keeps a scratched CD playing. You pick one of four levels when you generate the code:

At level H, nearly a third of the code can be destroyed and the data still reconstructs. That's exactly why you can drop a logo in the middle โ€” you're deliberately "damaging" it within the recoverable margin.

The trade-off: higher correction adds more modules, so the code gets denser at the same physical size. For a code printed large and clean, L or M is fine and scans fastest. For a code that will carry a logo, get printed small, or live on a surface that scuffs โ€” a truck, a coffee cup, an outdoor sign โ€” go with Q or H. If you're not adding a logo, don't reflexively pick H. You're just making the grid busier for no benefit.

The white border nobody thinks about

Every QR code needs a quiet zone: a blank margin around all four sides, at least four modules wide (four "dots" of empty space). Scanners use it to find where the code starts and stops. Without it, the code blends into surrounding text or artwork and plenty of phones won't lock on.

This is the single most common reason a code that looked fine on screen fails in print. A designer crops it tight to fit a layout, or drops it onto a busy photo with no padding, and the quiet zone vanishes. Most generators include the margin by default โ€” keep it. If you're placing the code on a colored background, set it inside a light box with room to breathe.

Size and contrast for print

The rough rule for physical codes: scanning distance should be about 10 times the code's width. A 1-inch (2.5 cm) code scans comfortably from roughly 10 inches โ€” fine for a flyer or a business card. A billboard meant to be read from 30 feet needs a code around 3 feet wide. Undersize it and no amount of error correction saves you.

A practical floor for anything handheld is about 0.8 inch (2 cm) per side. Smaller than that and cheap phone cameras struggle, especially in poor light.

Contrast matters as much as size. Scanners expect dark modules on a light background. Stick to that:

Static vs dynamic codes

This is where people get burned. A static QR code encodes the destination directly โ€” the URL is literally baked into the pattern. It works forever, needs no service, tracks nothing, and can never be changed. If you print example.com/oldpage on 10,000 flyers and later move that page, every code is dead.

A dynamic QR code encodes a short redirect URL that points to a server you control, and that server forwards to the real destination. You can change where it points after printing, and you get scan analytics. The catch: the code depends on that redirect service staying alive. If the provider folds, you stop paying, or the short domain lapses, every code you printed breaks โ€” and you can't patch printed paper.

Rule of thumb: static for anything you want to last indefinitely with no dependencies (a Wi-Fi password on a wall, a permanent link, a contact card). Dynamic only when you genuinely need editability or tracking and you trust the provider to stick around. A plain static code from everyboringtool.com's QR Code Generator is built entirely in your browser โ€” nothing is uploaded, no account โ€” so the code is yours with no third party in the loop and nothing to expire.

When this isn't the right approach

QR codes are a poor fit in a few spots, and it's worth being honest about them. They need a camera and usually a data connection, so they exclude anyone without a smartphone. They fail where people can't physically aim a phone โ€” a code at the bottom of a TV ad that flashes for two seconds, or on a highway sign, is decoration, not a link. And a bare code with no "Scan for the menu" style prompt gets ignored; people need a reason to lift their phone.

The one rule that saves you, every time: scan-test before you print at scale. Generate the code, then actually scan it with at least two different phones โ€” one iPhone, one Android โ€” using the plain built-in camera app, not a special reader. Test at the real size, on the real material, under the real lighting. A code that scans crisply on your monitor can fail on matte cardstock under warehouse fluorescents. Ten seconds of testing beats reprinting 10,000 flyers.

Do it now โ€” free and private

The tool runs entirely in your browser: nothing you add is uploaded, and there is no sign-up.

QR Code Generator โ†’

Related tools

URL Encode/DecodeImage ResizerBase64 Encode/Decode