QR Code Generator
Generate a QR code for any URL, text, or contact information.
When a Printed QR Code Won't Scan — The Technical Reasons
You generated a QR code, printed it on a flyer, and the cafe owner calls to say customers can't scan it. This is one of the most common QR printing failures, and it almost always traces to one of four preventable causes: insufficient quiet zone, low contrast, too much content for the print size, or the wrong error correction level for the use case.
Understanding these factors before generating — not after 500 flyers are printed — is the purpose of this section.
QR Code Structure: What the Modules Do
A QR code is a grid of black and white squares (called modules). The grid includes several functional regions:
- Finder patterns: the three large square-in-square symbols in three corners. Scanners use these to locate and orient the code regardless of rotation.
- Alignment patterns: smaller square-in-square symbols scattered through larger QR codes (version 2+). They allow scanners to correct for perspective distortion when the code is photographed at an angle.
- Timing patterns: alternating black/white rows connecting the finder patterns, used to determine module size and spacing.
- Format information: two strips adjacent to the finder patterns storing the error correction level and mask pattern — necessary to decode the data modules correctly.
- Data modules: the remaining squares that carry the encoded content, arranged in an 8-bit interleaved pattern with Reed-Solomon error correction codewords mixed in.
Error Correction Levels — The Most Important Setting for Print
QR codes use Reed-Solomon error correction, which allows a damaged or obscured portion of the code to be reconstructed from the surviving data. The four levels specify what percentage of the total module count can be lost and still allow successful decoding:
- Level L (Low, ~7% recovery): the smallest possible code for a given data length. Use only for digital displays on clean screens where the code will never be physically damaged. A coffee ring, fold crease, or slight print smear on an L-level code may make it unscannable.
- Level M (Medium, ~15% recovery): the default for most generators. Appropriate for general use including office and retail printing in good conditions.
- Level Q (Quartile, ~25% recovery): recommended for outdoor signage, menus that get handled frequently, and any context where physical wear is expected. The QR is roughly 25% larger than an equivalent L-level code.
- Level H (High, ~30% recovery): required whenever you overlay a logo or image on the center of the QR. The logo destroys some modules; error correction reconstructs them. Without H-level correction, a logo-overlaid QR may fail to scan. Also appropriate for industrial labels and environments with chemical exposure, moisture, or abrasion.
Quiet Zone: The Non-Negotiable White Border
The quiet zone is the empty white margin surrounding the QR code. The QR standard specifies a minimum of 4 modules on all sides. Scanners rely on this boundary to distinguish where the code ends and the surrounding background begins. If you print a QR to the edge of a label, place it adjacent to text or graphics, or put it on a dark background without sufficient margin, many scanners will fail to locate the finder patterns.
In practice, allow at least 4–6mm of white margin on all sides for print sizes under 5cm × 5cm. For smaller codes, increase the proportion — the margin must always be at least 4 modules wide, which at small print sizes becomes a significant fraction of the total code area.
Minimum Print Size for Reliable Scanning
Module size is the key variable: each module must be large enough for a camera to resolve it distinctly at typical scanning distances. General guidelines:
- Desktop scanning (phone held 10–20 cm from screen): 2 cm × 2 cm minimum; 4–6 cm preferred.
- Counter/menu scanning (held 20–40 cm): 3–5 cm minimum.
- Poster scanning (from 50–100 cm): 10–20 cm depending on content density.
- Longer payloads require larger codes: a 200-character URL at level M generates a version 10 QR (57×57 modules). At a 5 cm print size, each module is under 1mm — borderline for reliable scanning. Either shorten the URL (a URL shortener adds redirect latency; consider your own short domain), or increase the print size.
How to Use This Tool
- Enter the content to encode: URL, plain text, phone number, or any short payload.
- Select the error correction level: M for digital use, Q or H for print use, H for codes with a logo overlay.
- Choose a size — larger is always more scannable.
- Download as PNG (for most uses) or SVG (for print files that need to scale to any size without pixelation).
- Test-scan the downloaded file on at least two different phones before printing.
▢ FAQ
01 What is the maximum data a QR code can hold? +
The maximum capacity depends on the data type and error correction level. At level L: 7,089 numeric digits, 4,296 alphanumeric characters, or 2,953 bytes of binary data. At level H: 1,817 numeric digits or 1,273 alphanumeric characters. In practice, codes with over 300 characters become dense enough to require careful attention to print size and scanning distance.
02 Should I use a URL shortener to make a simpler QR? +
A shorter URL produces a simpler, more scannable code — that is a real benefit. The tradeoffs: the redirect adds 100–300 ms of latency on every scan, shortener services can go offline or change their terms, and branded short domains require domain registration and maintenance. For critical or permanent codes (product packaging, monuments, official documents), use your own domain's short URL rather than a third-party shortener.
03 Why does error correction level H produce a larger QR code? +
Reed-Solomon error correction adds redundant codewords that allow reconstruction of damaged data. Level H adds enough redundancy to recover from 30% module loss, which requires approximately 30% more total modules than an equivalent L-level code. The tradeoff is physical size vs. damage resilience.
04 My QR scans on my phone but not on a colleague's — why? +
Different phones use different camera sensors and QR-decoding algorithms with varying sensitivity. The most common cause is that your phone's sensor is better in low contrast or small-module situations. Test with at least an iPhone (native camera), a mid-range Android, and an older device. If any fails, increase the error correction level to Q or H, increase the print size, or shorten the payload to reduce module density.