QR Code Generator
Type or paste a link, click Generate, and download the QR code as a PNG. Pick an error-correction level, and know that the payload never leaves your browser — the encoder runs entirely on this page.
Text changed — click Generate to update the code.
The QR is encoded with Reed–Solomon error correction per ISO/IEC 18004, versions 1–6. To encode Wi-Fi access, use the format WIFI:T:WPA;S:NetworkName;P:Password;; — phones scan it as a join request.
How much fits, and what eats the space
The encoder here supports versions 1 to 6 — squares from 21×21 up to 41×41 modules. At the shallowest error correction (L) that holds up to 134 bytes; at the deepest (H) it holds 74. A plain URL fits comfortably; a paragraph does not.
Bytes matter more than characters. Every accented letter, CJK character or emoji costs two to four bytes in UTF-8, so a link with query parameters can be twice as heavy as it looks.
Shortening the payload is the cheapest way to make a code easier to scan: fewer modules mean larger dots at the same print size, and larger dots survive a scratch or a wrinkled flyer.
Choosing an error-correction level
Reed–Solomon recovery lets a scanner rebuild missing modules. The trade-off is density: level H stores roughly half as much as L for the same version, because about 30% of the modules carry redundancy.
L (7%) — screens and clean surfaces where the code will never be obstructed.
M (15%) — the default. Fine for most print.
Q (25%) — packaging, where codes sit next to graphics.
H (30%) — when you want to place a logo in the centre; up to about a quarter of the modules can be covered and the code still scans.
There is no quality difference in the decoded result — every level produces a valid code that decodes to the same text when intact.
Common payload formats phones understand
Most scanner apps detect plain text automatically, but a few prefixed formats trigger a specific action:
URL. Include the scheme (https://) — many scanners only open a link when it looks like one.
Wi-Fi. WIFI:T:WPA;S:SSID;P:password;; makes Android and most iPhone apps offer to join the network.
Contact. A vCard (BEGIN:VCARD … END:VCARD) opens as a contact card instead of raw text.
Email / SMS. mailto:name@example.com and SMSTO:number:message are recognised by most native scanners.
Frequently asked questions
Is there any time limit or watermark?
No. The QR is drawn by this page itself, so there is no expiry, no redirect through a third-party shortener and no logo stamped on the image. The code contains exactly what you typed.
What does “generated locally” mean?
The encoding — mode selection, Reed–Solomon error correction, masking — runs in JavaScript in your browser. The text you type is never sent to a server.
Why does my long text fail?
Versions 1–6 cap out at 134 bytes at level L and 74 bytes at level H. Shorten the text, use a URL shortener, or drop the error-correction level to L.
Can I put a logo inside the code?
Yes — generate at level H, download the PNG, and place a logo over the centre covering at most about 20–25% of the area. Test with two different phones before printing; if the logo is too large, no level will save it.
Do QR codes expire?
No. A QR code is just an encoding of your text. It only “expires” when the destination link dies, which is a property of the URL, not of the code.
What size should I print?
A rule of thumb: printed size (cm) should be at least a tenth of the scanning distance (m). A code scanned from 1.5 m should be about 15 cm wide, and denser versions need more room than sparse ones.