QR Code Generator Guide

A QR code is not an image of your text — it is a matrix of modules that a scanner reads back into data. Three settings decide whether a code scans reliably: how much data it carries, how much damage it can absorb, and how many physical pixels or millimetres each module gets. This tool exposes all three: content, output size, and error correction level.

Error Correction Levels

Error correction is redundancy. A higher level lets the code survive dirt, folds, or a printed logo overlay, at the cost of a denser pattern that needs more modules for the same data.

Error correction levels defined by ISO/IEC 18004
LevelRecoverable codewordsBest for
L — Lowabout 7%Clean, unobstructed display such as a screen or a flat label
M — Medium (default)about 15%General printing, menus, flyers
Q — Quartileabout 25%Codes partly covered by artwork or text
H — Highabout 30%Outdoor signage, stamped or worn surfaces, codes with a logo in the centre

Versions, Module Grid and Print Size

A QR version fixes the grid: version V has 17 + 4V modules per side, so version 1 is 21×21 and version 40 is 177×177. The standard also requires a quiet zone of four modules on every side, which is why the drawn matrix is 8 modules larger than the version number suggests. What matters for scanning is the size of a single module, not the size of the whole image.

Module density at the default 300 × 300 output
VersionModules per sideIncluding quiet zonePixels per module at 300 pxPrinted size at 0.4 mm per module
1212910.34 px11.6 mm
537456.67 px18.0 mm
1057654.62 px26.0 mm
1577853.53 px34.0 mm
20971052.86 px42.0 mm
251171252.40 px50.0 mm
301371452.07 px58.0 mm
401771851.62 px74.0 mm

Note: 0.4 mm per module is a common practical floor for reliable scanning at close range. Longer content pushes the version up, which shrinks each module — so a dense code printed small is the usual cause of scan failures.

Content Types and Payload Prefixes

Scanners act on the payload. A plain URL opens a browser; a prefixed string can dial a number, join a network, or add a contact. These prefixes are widely supported conventions rather than part of the QR specification itself.

Common payload formats
IntentPayload formatScanner behaviour
Open a web pagehttps://example.com/pageOpens the default browser
Send emailmailto:name@example.comComposes a message to the address
Dial a phone numbertel:+15551234567Starts a call
Send a text messageSMSTO:15551234567:helloPre-fills number and body
Join Wi-FiWIFI:T:WPA;S:network;P:password;;Offers to join the network
Add a contactMECARD:N:Name;TEL:15551234567;;Creates a contact entry
Show a locationgeo:39.9042,116.4074Opens a map at the coordinates

Worked Examples

All three use the tool defaults — 300 × 300 output and error correction level M.

  1. Short URL: a compact link fits a low version, so each module stays large: at version 5 the 300 px output gives 6.67 px per module, comfortable for screen and print alike.
  2. Long URL: a link with tracking parameters can push the version past 20, where 300 px yields only 2.86 px per module. Switching the output to 400 × 400 restores 3.81 px per module without shortening the link.
  3. Outdoor sign: choosing level H raises redundancy to about 30%, so the same content needs a denser grid. Compensate by increasing the output size rather than accepting a small dense code.

Scanning Reliability Checklist

Frequently Asked Questions

Which error correction level should I use? Level M suits most print uses. Move to Q or H when the code may be covered, folded, or exposed outdoors, and to L only when the surface is clean and you need the smallest possible pattern.

Why does my code fail to scan when printed small? Each module fell below what the camera can resolve. Increase the output size, or shorten the content so a lower version is used.

Does a higher level make the code bigger? It makes the pattern denser for the same data, which usually raises the version and therefore the module count. The exported pixel size is fixed by your size setting, so the modules get smaller.

Can a QR code hold uppercase-only text more efficiently? Yes. Alphanumeric mode encodes a restricted set — digits, uppercase letters, and a few symbols — more compactly than byte mode, so the same text needs fewer modules.

Is the generated image uploaded anywhere? No. The code is drawn in your browser and the PNG is produced locally, so nothing you type leaves the device.

Related Reading

For a fuller walkthrough of payload formats and print sizing, see our QR code guide. Secrets embedded in a code should be generated first with the Password Generator; for embedding data as text rather than an image, the Base64 Encoder and the Badge Maker cover the other common cases.