Methodology & Accuracy

Every generator on GenerateQRCodes.net is powered by a small, tested encoding engine. This page documents the payload formats, the conventions we chose, and — just as importantly — the limits of what a QR code can guarantee, so you know how far to trust a scan.

Two layers: payload and symbol

A QR code has two independent layers. The payload is the text encoded inside — a URL, a WIFI: string, a vCard. The symbol is the black-and-white matrix itself, produced according to the QR standard (ISO/IEC 18004) with built-in error-correction. Our engine builds the payload exactly right, and the symbol is produced by a vendored copy of the reference QR encoder (Project Nayuki's qrcodegen), kept byte-comparable with upstream. Most "my code doesn't work" problems are payload problems, which is why the payload layer is where most of our testing effort goes.

Symbol rules the renderer enforces

  • Quiet zone, always. The 4-module white border required by the standard is rendered into every download and cannot be disabled — cropping it is the most common self-inflicted scan failure.
  • Logo overlays force error correction H. A center logo destroys modules that error correction must rebuild, so the engine caps the logo at 16% of the symbol area and always encodes at the highest recovery level when one is present. The 16% cap is decode-tested — our round-trip suite verifies a worst-case logo at that size still scans — not derived from the theoretical ~30% EC-H recovery ceiling, which a centered logo exhausts well before 30% of the area.
  • Contrast is computed, not guessed. The style panel evaluates your color pair with the WCAG relative-luminance contrast formula and warns below 4.5:1, and warns separately for light-on-dark (inverted) codes, which many scanners reject.

Payload conventions

  • WiFi. The de-facto WIFI:T:<auth>;S:<ssid>;P:<password>;; convention, with the special characters \ ; , : " backslash-escaped so punctuation in a password cannot corrupt the code.
  • Contact cards. vCard, chosen over MECARD for broader field support and better scanner coverage.
  • Email, SMS, phone, locations. The standard URI schemes (mailto:, sms:, tel:, geo:) with proper percent-encoding of user-supplied text.
  • Links. Encoded exactly as entered after validation — we never wrap your URL in a shortener or tracking redirect.

Each generator's page states the exact convention it uses and any scanner caveats.

Static codes only

Every code is static: the data lives in the image itself, with no redirect through our servers. Static codes never expire and cannot be held hostage — but they also cannot be edited after printing, and scan counts cannot be tracked. We consider that the right default and state it plainly rather than selling the alternative.

What the generators do not verify

The engine validates format, not truth: it cannot know whether a WiFi password is correct, a phone number reachable, or a URL safe. Error correction helps a damaged code scan, but print size and contrast still matter. Treat a freshly generated code as untested until a real device has scanned it.

Worked examples can't drift

The example payloads in each page's explanation are computed at build time by the very same engine that runs the interactive generator, not typed in by hand. If the encoding logic ever changed, the copy would change with it (or the build would fail), so the documentation cannot silently disagree with the tool.

Tested against reference payloads — and round-tripped

The engine is covered by automated tests that check its output against independently constructed reference strings — including hostile inputs like passwords full of semicolons and names with commas. On top of that, a round-trip suite renders each payload type to an image, rasterizes it, and decodes it with an independent QR decoder: the decoded text must match the payload byte for byte, including a worst-case run with a logo obscuring the symbol's center. If you believe a generated code is wrong, that is exactly the kind of report we want: see the contact page, and confirmed issues are fixed in the engine and locked in with a new test.