QR Code Generator

Create a QR code from any text, link or Wi-Fi details and download it — generated in your browser, with the design rules that keep it scannable.

Upper-casing the domain makes the code simpler

QR has several encoding modes. Digits pack at about 3.3 bits each, and a 45-character alphanumeric set packs at 5.5 — but that set holds digits, upper-case letters and nine punctuation marks, and no lower-case letters at all. A single lower-case letter pushes that run of text into byte mode, which spends a full 8 bits on every character.

Encoding the same URL three ways with a real encoder:

URLModes usedResult
https://example.com/catalog Byte 29×29
HTTPS://EXAMPLE.COM/catalog Alphanumeric + Byte 25×25
HTTPS://EXAMPLE.COM/CATALOG Alphanumeric 25×25

The middle row is the one to copy. Encoders split the input into segments and choose a mode per segment, so upper-casing only the scheme and host captures the whole saving — 29×29 down to 25×25 — while leaving the path untouched.

That distinction matters rather more than it looks. Scheme and host are case-insensitive by specification, so HTTPS://EXAMPLE.COM reaches the same server. Paths are not case-insensitive — on most servers /Catalog and /catalog are different pages. Upper-casing the whole URL is common advice and it can silently point your code somewhere that does not exist.

The same logic explains why a phone number or an order reference makes such a small code. Pure digits get numeric mode, which is the densest of all. At one fixed code size:

ModeCharacters that fitWhy
Numeric 513 digits only, about 3.3 bits each
Alphanumeric 311 upper case and nine symbols, 5.5 bits each
Byte 213 anything else, a full 8 bits each

Same square, 2.4 times as many characters. The full alphanumeric set, for reference, is 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:.

And maximum error correction is not the safest setting

The four correction levels recover from roughly 7%, 15%, 25% and 30% damage, so choosing the highest sounds like free insurance. It is not free. The redundancy has to be stored, and it is stored as more modules.

LevelRecoversCode sizeModules
L ~7% 33×33 1,089
M ~15% 37×37 1,369
Q ~25% 41×41 1,681
H ~30% 49×49 2,401

The same 100 characters take 1,089 modules at level L and 2,401 at level H — 2.2 times as many. Printed at one physical size, each H module ends up about 67% the width of an L module.

Whether that trade is worth making depends entirely on how the code is likely to fail, and the two failure modes want opposite answers. Level H earns its place when part of the code gets covered — a logo dropped in the middle, a sticker, a scuffed label — because it can lose a whole region and still decode. It works against you when the constraint is optical: a small label, a cheap camera, a poster read from across a room. There the failure is at the sensor, the redundancy never gets used, and the coarser modules of L or M are simply easier to resolve.

A reasonable default is M, which is what most generators use and what this one starts on. Move to H when you are putting something on top of the code, and to L when the code has to be small and nothing will obscure it.

How to use

  1. Enter the text or URL to encode.
  2. Choose the error correction level.
  3. Download at a size suited to the viewing distance.
  4. Test it with more than one phone before printing.

Frequently asked questions

What is error correction and which level should I use?

Redundant data allowing a damaged code to still be read, at four levels from about 7 to 30 per cent recoverable. Higher levels make the code denser but survive damage, dirt and a logo placed over the middle — which is exactly why logo overlays work at all.

How large should I print it?

As a rough rule, the code should be about a tenth of the scanning distance across — a code read from two metres wants roughly 20 centimetres. Printing too small is the commonest reason a code fails in the field, and it cannot be fixed after the flyer is printed.

Does the amount of data matter?

Considerably. More characters means a denser grid of smaller modules, which is harder to scan from a distance or in poor light. Shortening a long URL produces a visibly simpler code that scans faster, which is why link shorteners are common on printed material.

Can I change the colours?

Within limits. Contrast is what matters — dark on light, with a good margin between them. Inverting to light on dark breaks some scanners, and low-contrast pairs fail in poor lighting. The quiet zone of blank space around the code must also be preserved.

Does this code expire or track scans?

No. The URL is encoded directly into the image, so the code works forever and nothing is recorded. Services offering dynamic or trackable codes work by encoding their own redirect URL, which means the code stops working if that service does.

Does my data get uploaded?

No. The code is generated entirely in your browser, which matters particularly for Wi-Fi codes — a great many online generators build the image server-side, meaning you hand them your network password.

🔒 This tool runs entirely in your browser. Nothing you enter is uploaded, logged, or stored.