QR Code Generator
Make a QR code for a link, wifi network or contact — encoded in your browser, never uploaded.
Typed here, encoded here. It is never transmitted.
Higher survives more damage and makes a denser code.
The blank border. Below 4 many scanners struggle.
Nothing you type is transmitted. Encoding, masking and rendering all happen in this page, so the wifi password in the field above never leaves your device.
How it works
The code is built here, in the page. That matters more than it sounds: most QR generators are advertising businesses, and a worrying number of the free ones hand you a *redirect* through their own domain rather than a code containing your link. That lets them count the scans, and it means your printed sign stops working the day they switch it off or start charging. A QR code made here contains exactly what you typed and nothing else — no redirect, no tracking, no expiry, and nothing to keep paying for.
A QR symbol is a bitstream wrapped in a great deal of structure. The text is encoded in the most compact mode it fits — numeric packs three digits into ten bits, alphanumeric packs two characters into eleven, and anything else falls back to raw bytes. That stream is padded, split into blocks, and each block gets Reed–Solomon error correction codewords computed over GF(256). The blocks are then interleaved, so a coffee stain destroys a few codewords from each block rather than all of one.
Then the symbol is drawn: three finder patterns so a scanner can locate and orient it, alignment patterns so it can correct for the angle you are holding the phone at, timing patterns to count modules, and format bits recorded twice in case one copy is damaged.
Finally the whole grid is masked. Eight masks are applied in turn, each is scored against four penalty rules — long runs of one colour, solid blocks, anything resembling a finder pattern, and an unbalanced ratio of dark to light — and the lowest-scoring one wins. That is why two codes with the same content but different error correction can look nothing alike.
Error correction is the setting worth thinking about. L recovers 7% of the symbol, H recovers 30%. High correction is what allows a logo in the middle, and what makes a code printed on a box that gets scuffed still scan — but it makes the code denser, so at a fixed physical size each module is smaller and a cheap scanner may do worse. M is the right default for a screen or a clean print; Q or H for anything that will be handled, weathered or partially covered.
Common questions
Does the code expire, or track scans?
No to both. The code contains your text directly, so there is nothing to expire and nobody counting. A code that redirects through someone else's domain is the kind that stops working; this is not one of those.
Which error correction level should I pick?
M for a screen or a clean print. Q or H for a label that will be handled, weathered, or partly covered — and H if you plan to put a logo over the middle. Higher levels pack in more modules, so if the code is physically small, going too high can make it harder to scan rather than easier.
How small can I print it?
The usual rule is a module of at least 0.4 mm for print, and the whole symbol no smaller than about 2 cm square for a typical version 3 code at normal scanning distance. More important than size is the quiet zone: four modules of blank space on every side. Codes fail far more often for a missing margin than for being small.
SVG or PNG?
SVG for print and for anything that will be resized — it stays sharp at any scale and drops into Illustrator or Inkscape as clean paths. PNG for the web, for messaging apps, and for anything that will not accept a vector.
Why does the code change completely when I edit one character?
Because the mask is chosen by score. One extra character can change which of the eight masks wins, and a different mask inverts a different set of modules across the whole symbol. Both codes scan to the same text.