The Ultimate Guide to QR Codes in 2026
QR codes survived a 25-year journey from car factories to restaurant menus to phishing campaigns. Here's how they actually work and how to use them well.
By Syed Husnain Haider Bukhari · · Updated
QR codes had a strange decade. Invented by Denso Wave for the Japanese automotive industry in 1994, they spent the 2010s as the punchline for failed marketing gimmicks — billboards with QR codes nobody could scan from a moving car, magazine pages with QR codes nobody bothered to download an app for. Then the pandemic happened, restaurants printed menus as QR codes, every smartphone camera learned to scan them natively, and the format finally hit ubiquity.
This article explains how QR codes actually work, the types and data formats they support, the design constraints (error correction, contrast, quiet zones), and the security pitfalls — QR phishing ("quishing") was the fastest-growing attack vector of 2024-2025.
How a QR code encodes data
A QR code is a 2D matrix of black and white modules (the small squares). The matrix can be as small as 21×21 (Version 1) or as large as 177×177 (Version 40). Three of the four corners contain large square "finder patterns" that let the scanner orient the code regardless of rotation. Between them, a regular grid of timing patterns helps the scanner calibrate module size.
Data is encoded in one of four modes: numeric (digits only), alphanumeric (digits and uppercase Latin letters plus a few symbols), byte (any 8-bit data including UTF-8 text), and kanji (compact Japanese encoding). The scanner reads the format info, decodes the bits, and applies Reed-Solomon error correction to recover from damage.
Error correction levels
Reed-Solomon error correction is the magic that lets QR codes survive partial damage. Four levels exist: L (7%), M (15%), Q (25%), H (30%). At level H, up to 30% of the modules can be destroyed and the scanner still recovers the original data.
Higher error correction means more redundancy and a denser code (same data, more modules). For QR codes printed at small sizes or placed in environments where damage is likely (outdoor signage, packaging that gets scratched), use M or Q. For codes meant to be displayed cleanly on a screen, L is fine. Level H is also what enables QR codes with logos in the middle — the logo intentionally obscures part of the code, and error correction recovers it.
Static vs dynamic QR codes
A static QR code encodes its data directly. Scanning it yields exactly what was encoded — a URL, a vCard, a wifi network. The code can't be changed after generation; if the destination URL needs to change, you need a new code printed everywhere.
A dynamic QR code encodes a short URL that redirects to the real destination. The real destination can be edited at any time without reprinting the code. Dynamic codes also enable analytics — every scan hits the redirect service first, so you can count opens, track geography, and A/B test destinations.
Use static for one-off use (wifi credentials at home, contact cards) and dynamic for any production marketing or operations use (menus, posters, packaging) where you may want to update the destination.
Common QR code data formats
- URL — `https://example.com` — the most common; the scanner opens the link.
- vCard — contact info; the scanner offers to save it to the address book.
- Wifi — `WIFI:T:WPA;S:NetworkName;P:Password;;` — the scanner offers to join the network.
- Email — `mailto:hello@example.com?subject=Hi` — opens the mail client.
- SMS — `smsto:+15551234567:Message text` — opens the SMS app prefilled.
- Geo — `geo:37.7749,-122.4194` — opens map app at coordinates.
- Calendar event — VEVENT block; adds to calendar.
Design rules that matter
Contrast: dark modules must be significantly darker than light modules. Reversed (light on dark) codes work technically but fail with some scanners — keep it conventional. Avoid low-contrast color combinations entirely.
Quiet zone: there must be a clear margin of at least 4 modules width around the entire code. QR codes packed against other graphics often fail to scan even when the code itself is perfect.
Size: the rule of thumb is that the code must be at least 1/10th the scanning distance. A QR code meant to be scanned from 1 meter away should be at least 10 cm wide. Billboard QR codes that nobody can scan from the highway violate this rule by an order of magnitude.
QR phishing and security
"Quishing" — phishing via QR codes — exploded in 2024-2025. An attacker prints a sticker with a malicious QR code and places it over a legitimate code in a public place (a parking meter, restaurant menu, charging station). Victims scan, are taken to a phishing site that looks like the real one, and enter credentials.
Defense: always look at the URL preview before tapping through. iOS and Android both show the destination URL before opening it. If the domain doesn't match the context (a parking meter that points to `parkmeter-payment-secure.tk` is not the legitimate option), don't proceed.
For your own QR codes, prefer your own short domain over a public shortener — `pay.cityname.gov/parking` builds trust where `bit.ly/3xK9q` doesn't.
Practical tips
- Use error correction level M or Q for printed codes; L is fine for screen-only.
- Always include a clear quiet zone (4-module margin) around the code.
- Test scanning from the actual distance and angle users will use.
- Pair the code with a short human-readable URL — some users will type it instead of scanning.
- Use dynamic QR codes for any link that might change; static for one-shot use.
- Audit physical QR codes regularly for sticker overlays (quishing).
Wrapping up
QR codes are a remarkably durable piece of technology — robust to damage, agnostic to language, free of patent encumbrance, and supported by every smartphone shipped in the last decade. The format itself is the easy part; the hard parts are choosing the right data format, designing for actual scanning conditions, and protecting users from QR-based phishing.
Our free QR code generator produces codes for URLs, vCards, wifi, email, SMS, geo, and plain text, with selectable error correction and high-res PNG/SVG export. Generate once, deploy anywhere, no signup required.