ToolZen ToolZen
Graphics generator client

QR Code Generator

Generate QR codes from any URL, text, or data and download as a high-resolution PNG for print or digital use.

Advertisement (Top Banner)
Enter text to generate the QR code
Advertisement (Bottom)

A QR code is a URL — or any text — drawn as a grid that a camera can read. Generating one takes a second. The decisions that matter are what you put inside it and how much redundancy you buy, and the first of those is the one people get wrong in ways that cannot be undone once the thing is printed.

A printed QR code is permanent — point it at a redirect

This is the most expensive mistake in the subject, and it is worth more than everything else on this page. The URL is physically encoded in the pattern. Once a code is printed on a menu, a poster, a business card or ten thousand product boxes, that destination can never change. Ever.

Restructure your site and the code leads to a 404. Move to a new domain and it leads nowhere. The pattern in the ink cannot be edited.

The fix costs nothing and takes a minute: point the code at a short URL on a domain you control — yoursite.com/m — and have that redirect to wherever you actually want. Then, when the destination changes, you change the redirect and every code ever printed keeps working. Encode the redirect, never the final destination. This is also why the paid "dynamic QR" services exist, and it is worth knowing you can do the same thing yourself with a single redirect rule.

What the error correction levels actually cost

Reed-Solomon redundancy is built into every QR code, which is why a scuffed or partly covered one still scans. The four levels recover from roughly 7%, 15%, 25% and 30% damage — L, M, Q and H.

The redundancy is not free: it takes space, and space means modules. Encode a 37-character URL and you get a 29×29 grid at level L, 33×33 at Q, and 37×37 at H. At a fixed print size, more modules means each one is physically smaller, and past a point a smaller module is harder for a camera to resolve than a larger one is to damage. Cranking error correction to H can make a code scan worse, not better.

But there is a free lunch worth knowing about. Capacity comes in discrete steps, so upgrading a level often costs nothing at all: that same 37-character URL is 29×29 at both L and M. Identical grid, twice the damage tolerance, zero cost. M is the sensible default for that reason — and it is worth checking whether your particular string gets Q for free too.

How much fits

The ceilings, measured: 2,953 characters at level L, 2,331 at M, 1,663 at Q and 1,273 at H. Those are for arbitrary text; a code restricted to digits or uppercase letters packs considerably more, because the format has a tighter mode for each.

The numbers are large enough that length is rarely the binding constraint — scannability is. A 2,000-character code is a 177×177 grid of hair-thin modules that no phone will read from a poster. If you find yourself near the limits, the answer is not a bigger code; it is putting a link in the code and the content behind the link.

The white border is part of the code

The quiet zone — four modules of empty space on every side — is specified, not decorative. It is how a scanner works out where the code ends and the world begins. Crop it off to make the code fit a tight layout and you get a code that scans on your desk under good light and fails on a wall in a restaurant, which is the worst kind of failure because you will not find it in testing.

The same goes for contrast and orientation. Dark on light is what scanners expect; inverted codes work on some readers and not others. And the three big squares in the corners are the finder patterns that tell the scanner how the code is rotated — a logo placed over one of them does not degrade the code, it destroys it.

Logos work by spending your redundancy

Putting a logo in the middle of a QR code is not a special feature. It works because you are deliberately damaging the code and letting the error correction repair it. At level H the code tolerates about 30% loss, so a logo covering a fraction of the middle is within budget.

Two things follow. The logo must stay in the centre, away from the finder patterns in the corners, because those are not covered by error correction — they are how the scan starts. And whatever budget the logo spends is no longer available for real-world damage: a code with a logo has less tolerance for a scratch, a fold or a bad camera angle than the same code without one. If a code with a logo is scanning unreliably, that is the arithmetic, not bad luck.

Common questions

Is my data sent to a server?

No. This tool is marked "client": the code is generated in your browser tab and neither the text nor the image is transmitted. That is worth knowing because many QR generators route through their own domain — the code they hand you points at their redirect, not at your URL, which means they can count your scans and, if they ever disappear, so does your code.

Which error correction level should I pick?

M for almost everything. It is the sensible default and, for short URLs, frequently free — the grid comes out the same size as L. Choose H only when the code will genuinely be damaged or partly covered: printed on packaging that gets handled, or carrying a logo. Choose L when the string is long and the code needs to stay legible above all else.

Can I edit a QR code after printing it?

No. The destination is the pattern. This is why the redirect advice above matters so much: if your code points at a URL you control and can re-target, you can change where it goes forever. If it points straight at the final destination, your only option is to reprint everything.

Why does my code work on my phone but not on a customer's?

Usually size, contrast or the quiet zone. A code needs to be physically big enough for the camera at the distance people will actually stand — a rough rule is that the code should be about a tenth of the scanning distance, so a poster read from two metres needs a code around 20 cm across. After that, check that the white border survived your layout, and that the printed contrast is genuinely dark on light rather than two mid-tones that looked fine on screen.

Can a QR code contain something other than a URL?

Yes — it is just text, and there are conventions scanners recognise: WIFI: for network credentials, BEGIN:VCARD for contact details, mailto: and tel: for the obvious things. They work, though support varies by scanner app in ways that are hard to test. For anything you are printing at scale, a URL is the only thing every reader handles identically.