Create a QR code for a link, WiFi, email or phone — customize the colors and download it as a PNG.
A QR code is a two-dimensional barcode that stores data in a grid of black and white modules. Unlike a traditional barcode, which is read along one axis, a QR code is read in both directions at once — which is why it holds far more data and can be scanned at any rotation.
The three large squares at the corners are finder patterns, which let a scanner locate the code and work out its orientation. The smaller square near the fourth corner is an alignment pattern correcting for perspective distortion when the code is photographed at an angle. The dotted lines connecting the finders are timing patterns, which establish the grid spacing.
QR codes use Reed-Solomon error correction, so a damaged or partly obscured code still scans. There are four levels, and the choice is a trade between robustness and capacity.
| Level | Recoverable damage | Capacity cost | Use for |
|---|---|---|---|
| L (Low) | ~7% | None | Clean digital display, long data |
| M (Medium) | ~15% | Slight | General purpose default |
| Q (Quartile) | ~25% | Moderate | Print, or a logo overlay |
| H (High) | ~30% | Significant | Industrial, dirty or worn surfaces |
This redundancy is what makes centred logos possible: at level H, covering up to 30% of the code still leaves enough data to reconstruct it. Keep any logo central and under about 25% of the area, and always test the result before printing.
How much a code holds depends on its version (size), the error correction level, and the type of data. Numeric data packs most efficiently.
| Data type | Maximum at level L |
|---|---|
| Numeric | 7,089 digits |
| Alphanumeric | 4,296 characters |
| Binary / UTF-8 | 2,953 bytes |
In practice, shorter data is better. More data means more modules, smaller modules at a given printed size, and a harder scan. A long URL produces a dense code that fails on worn print or a poor camera — using a short URL is the single most effective thing you can do to make a code scan reliably.
A code generated here is static: the data is encoded directly in the pattern, so it works forever, needs no service and cannot be tracked or changed. If the URL it encodes ever changes, the printed code becomes useless.
Dynamic codes encode a short redirect URL pointing at a service that forwards to the real destination, so the target can be edited after printing and scans can be counted. The trade is a permanent dependency: if that service shuts down or the subscription lapses, every code you printed stops working. For anything printed at scale and intended to last, a static code pointing at a URL you control is the more durable choice.
A QR code is opaque to the human eye — you cannot tell where it leads until you scan it. That has made stickers placed over legitimate codes on parking meters and restaurant tables a real form of fraud, sometimes called quishing. As a user, check the URL your phone previews before opening it, and be suspicious of any code that leads to a payment or login page. As a publisher, printing the destination domain in text beside the code helps people verify it.
Codes are generated locally in JavaScript. The data you encode is never sent to a server, which matters for Wi-Fi credentials and contact details — and it means the code will keep working indefinitely, since there is no service behind it that could disappear.
No. They are static codes with the data encoded directly in the pattern, so there is no service behind them that could shut down. They work indefinitely — but the URL they point at cannot be changed after printing.
A working rule is at least one tenth of the intended scanning distance, so 20 cm for a poster read from 2 m. Below about 2 cm codes become unreliable regardless of distance, and more encoded data raises that floor.
Yes, thanks to error correction. Use level H, keep the logo central and under about 25% of the area, and test the result on several phones before printing.
The usual causes are too little quiet zone around the edge, insufficient contrast, a glossy or curved surface, printing too small for the data density, or inverted colours. Test at final size in the real lighting.
No. Generation happens entirely in your browser, so Wi-Fi passwords and contact details you encode never leave your device.