What does QR stand for?
QR stands for Quick Response. The format was invented in 1994 by Masahiro Hara at Denso Wave, a Toyota subsidiary, to track vehicle parts moving through assembly lines. The goal was a barcode that could be read from any direction, much faster than traditional 1D barcodes. Denso Wave released the format royalty-free, which is why it became universally adopted.
The anatomy of a QR code
A QR code is a square grid of black and white modules (the individual squares). Different regions of that grid have specific purposes:
Finder patterns
The three large square-within-square symbols in three corners of the code (top-left, top-right, bottom-left) are called finder patterns. They tell the scanner: "this is a QR code, and here's how it's oriented." Their fixed 7:5:3 ratio of black-white-black lets the scanner detect the code even if it's tilted or photographed at an angle.
Alignment patterns
Larger QR codes (encoding more data) include smaller alignment patterns — smaller squares inside the data area — that help the scanner correct for image distortion, curvature (like a code on a bottle), or lens barrel distortion.
Timing patterns
Alternating black-and-white lines that run between the finder patterns allow the scanner to determine the size of each module and establish the grid coordinates. Think of them as rulers the scanner uses to map out the code.
Format information
Encoded in strips adjacent to the finder patterns, the format information tells the scanner what error correction level is used and the mask pattern applied to the data (more on both below).
Data and error correction modules
The remaining modules in the code carry the actual data — your URL — alongside error correction codewords that allow the scanner to reconstruct the data even if part of the code is damaged or obscured.
How data is encoded
QR codes support four encoding modes depending on the type of content:
- Numeric: digits 0–9 only. Most efficient — up to 7,089 characters.
- Alphanumeric: uppercase letters, digits, and a small set of special characters. Up to 4,296 characters.
- Binary (byte): any byte sequence, including full ASCII text and URLs with lowercase letters and special characters. Up to 2,953 characters. This is what almost all URL QR codes use.
- Kanji: Japanese characters encoded in Shift JIS. Up to 1,817 characters.
Most URL QR codes use binary mode because URLs contain lowercase letters, forward slashes, dots, colons, and query string characters that only binary mode supports. This is why using HTTPS rather than HTTP in your URL doesn't meaningfully change the QR code — both are binary-encoded the same way.
Error correction levels — and why they matter
QR codes use Reed-Solomon error correction, which adds redundant codewords to the data so that a partially damaged code can still be decoded. There are four error correction levels:
| Level | Label | Data recovery | Best for |
|---|---|---|---|
| Low | L | Up to 7% damage | Clean digital environments |
| Medium | M | Up to 15% damage | General use, indoor print |
| Quartile | Q | Up to 25% damage | Industrial / outdoor |
| High | H | Up to 30% damage | Logos overlaid on code, rough handling |
Higher error correction means a denser, more complex code — because more of the modules are dedicated to redundancy rather than data. FlexQRSnapper uses Level H by default, which adds the most redundancy and makes codes resistant to wear, smudging, and partial coverage. If you're embedding a logo over the centre of your QR code, Level H is essential.
Practical tip: if your URL is very long and the resulting code looks extremely dense, try shortening the URL first. A simpler code at Level H is more reliable than a complex code at Level L.
Mask patterns — reducing solid areas
Raw data encoded into a QR grid sometimes creates large solid black or white areas — bad for scanning because the scanner uses contrast transitions to read modules. To prevent this, QR codes apply one of eight mask patterns, which selectively invert modules according to a mathematical formula. The generator evaluates all eight masks and picks the one that produces the most balanced, scannable result.
This is why two QR codes encoding the same URL can look subtly different in their module patterns, even if generated by the same tool.
Static vs dynamic QR codes — the key distinction
This is one of the most important things to understand before generating a QR code for any real-world use.
Static QR codes
A static QR code encodes your actual data — the full URL — directly into the module pattern. Once generated, the code cannot be changed. If your destination URL changes, the code is useless and must be regenerated and reprinted. However, static codes never expire, never require a subscription, never rely on a third-party server, and work anywhere — even offline (as long as the user has an internet connection to reach your URL).
Static codes are what FlexQRSnapper generates.
Dynamic QR codes
A dynamic QR code doesn't encode your actual URL. Instead, it encodes a short redirect URL hosted by the QR service provider. When someone scans the code, their phone hits the provider's server, which redirects them to your actual destination. This architecture allows you to change the destination URL any time without reprinting the code — and it enables scan analytics (how many scans, from where, on what device).
The trade-off: dynamic codes require an active paid subscription. If you stop paying, the redirect goes dark and your printed QR codes stop working — even if they're on menus, packaging, or signage you've already distributed.
Which should you use?
For the vast majority of use cases — linking to a website, menu, social profile, or event page — a static QR code is the right choice. It's simpler, free, and permanent. Dynamic codes make sense for large campaigns where you expect the destination to change after printing, or where scan analytics are a business requirement worth paying for.
How does a phone decode a QR code?
Modern smartphone cameras decode QR codes in real time using the following steps:
- The camera captures a frame containing the QR code.
- The image processing layer identifies the three finder patterns and calculates the code's orientation and perspective.
- The alignment patterns (in larger codes) correct for any distortion.
- The timing patterns establish the module grid.
- The format information is read to determine the error correction level and mask pattern.
- The mask pattern is un-applied (XORed) to recover the raw data modules.
- Reed-Solomon error correction reconstructs any damaged or missing codewords.
- The data is decoded according to the encoding mode (usually binary/byte for URLs) and returned to the OS as a URL, which the camera app presents to the user as a notification to open.
This entire process happens in under 100 milliseconds on a modern phone — which is why the experience feels instant.
Generate your QR code now
Free, browser-based, no sign-up. Uses Level H error correction by default.
Try FlexQRSnapper →