Most QR generators on the web post your text to a server and hand back an image. This one does not: the QR Code Generator implements the ISO/IEC 18004 encoding in the page, builds the module matrix, and paints it onto a canvas. Nothing about the link, the phone number or the message you encode ever leaves the tab.
Four input types put the right prefix on for you. urland text encode what you typed, email prepends mailto: and phone prepends tel:, which is the difference between a scanner offering to open a message and offering to search the web for a string of digits.
Encoding runs at error correction level M, the middle of the four levels, which spends about 15% of the code on redundancy and tolerates that much damage or obstruction. Output sizes are 128, 200, 300 and 400 pixels, and the canvas is drawn with hard pixel edges rather than smoothing so the modules stay crisp when scaled.
Getting a Scannable Code Out of a Link
- Pick a type first, because switching afterwards clears the field. The placeholder changes with it, from
https://example.com to +1 555 000 0000 and so on. - Type or paste the value and press Generate, or just hit Enter, which does the same thing without moving your hands.
- Choose a size. Once a code is on screen, changing the size regenerates it automatically rather than waiting for another click.
- Scan it with a phone before you use it anywhere. That is the only real test, and it takes 5 seconds.
- Press Download PNG for a file named
qr-code- plus a timestamp. Print it larger than you think you need: a code below about 2 cm square is unreliable on a camera at arm's length.
Capacity Limits and Version 7
- Versions 1 through 7 are supported, spanning grids from 21 modules square to 45. The encoder picks the smallest version your data fits into, so a short link produces a visibly sparser code than a long one.
- Capacity at level M runs 13, 25, 41, 61, 83, 105 and 121 bytes for those seven versions. Exceed the last of them and you get
Input too long for QR code (max ~120 characters; fewer for non-ASCII text, which uses multiple bytes per character). - Characters are not bytes. An accented letter costs 2 and most emoji cost 4, so a 40-character message in Japanese will not fit where a 100-character English one does.
- The cap stops at 7 deliberately. Versions 8 and above at this error-correction level split data across two differently sized correction blocks, which this encoder does not model, and generating them anyway would produce codes that look right and refuse to scan.
- A 4-module quiet zone is added on every side, so the drawn code is smaller than the pixel size you chose. That white margin is part of the specification and cropping it is the usual reason a printed code fails.
Not a Substitute for a Dynamic QR Service
- The code encodes your text directly, so the destination is fixed forever. Print 500 flyers and change the URL, and all 500 are dead. Point the code at a redirect you control if the target might move.
- There is no scan tracking, because there is no server. Nobody counts the scans, including you.
- Logos, colours and rounded modules are not offered. The canvas draws plain black squares on white, which is the most reliable thing a scanner can be given.
- vCard, WiFi and calendar payloads are not built in. You can still encode one by choosing text and pasting the raw payload, but the 121-byte ceiling makes a full vCard unlikely to fit.
- Level M is not adjustable. If a code will be printed on something that creases or gets dirty, a generator offering level Q or H gives you more margin than this one can.