QR Code Generator — URLs, Wi-Fi, vCards, and more
Create a scannable QR code in seconds for a link, plain text, a Wi-Fi network, a contact card, or a pre-filled email or SMS. Pick the colours, set the error-correction level, drop in a centre logo. Encoded entirely in your browser — no signup, no upload, no expiry.
How it works
QR Code is an ISO/IEC 18004 symbology — a published international standard that any encoder and any reader agree on. The data you type is mapped through four steps: mode selection, error correction, masking, and module placement. Pick a mode (URL, Wi-Fi, vCard, etc.) and the generator turns your input into the canonical payload string for that mode, then the encoder packs the bytes into the smallest QR symbol that holds them at the error-correction level you chose.
Payload formats. Each non-text mode uses a published convention so that any standards-compliant scanner does the right thing on scan:
WIFI:T:WPA;S:SSID;P:password;;— ZXing Wi-Fi format. Reserved characters (\,;,,,:,") are backslash-escaped.MATMSG:TO:[email protected];SUB:Subject;BODY:Body;;— the broadest-compat email format (works on legacy Android cameras that don't parsemailto:).SMSTO:+94771234567:Hello— pre-fills the SMS app with recipient and body.tel:+94771234567— RFC 3966 dial-string.- vCard 3.0 (RFC 2426) — a multi-line block starting with
BEGIN:VCARDand ending withEND:VCARD. Commas, semicolons, and backslashes inside fields are escaped per section 5 of the RFC.
Error correction. QR Code uses Reed-Solomon ECC over a Galois field, so part of the code can be obscured (a sticker, a coffee stain, a centre logo) and the symbol still decodes. The four levels — L (~7%), M (~15%), Q (~25%), H (~30%) — describe how much of the data you can lose. Higher levels add redundancy bytes, which is why the same text produces a denser code at H than at L.
Capacity. At version 40 (the largest QR symbol, 177 × 177 modules) you can store up to 2,953 bytes at level L and 1,273 bytes at level H. This generator runs a capacity check before handing the payload to the encoder, so you get a clear error if your input is too long to fit any symbol at the chosen ECL — rather than a silent failure deep inside the encoder.
Cross-checked. The minimum QR version computed from the ISO/IEC 18004 byte-capacity table is compared against the version theqrcodeencoder actually selects. If they disagree, the capacity table on this page is wrong — and the "cross-checked ✓" line under the QR version readout will not appear. They match for every input we've tested so far.
Worked examples
Frequently asked questions
Sources & references
- ISO/IEC 18004:2024 — QR Code bar code symbology specification
- ZXing — Barcode Contents (payload formats for WiFi, MeCard, MATMSG, SMSTO, tel)
- RFC 2426 — vCard MIME Directory Profile (v3.0)
- RFC 3966 — The tel URI for Telephone Numbers
- Denso Wave — QR Code version capacity tables
Capacity tables and payload formats above were last cross-checked against the cited primary sources on 2026-05-11. If any reader app ever interprets a QR from this page incorrectly, please email me with the exact input — that is the kind of fix we ship within 24 hours.
Related tools
Comments & feedback
Spotted a bug or want an improvement? Tell us — our team reviews every comment, and good ideas get built. Comments are public and anonymous.
Found a bug, edge case, or want to suggest a new payload format?
Email me at [email protected] — most fixes ship within 24 hours.