QR Code Scanning Distance

QR code scanning distance is the range of distances at which a phone camera can find and decode a QR code. The maximum is set by how many camera pixels land on each module (the small black and white squares in the code). So scan range depends on three things: the code’s printed width, how many modules it has, and the resolution of the camera frame the scanner reads.
How QR Code Scanning Distance Is Calculated
A code scans reliably while each module covers about 3 pixels of the camera frame. Google’s ML Kit documentation sets the hard floor at 2: “The smallest meaningful unit of the barcode should be at least 2 pixels wide.” The extra pixel is headroom for blur and noise.
With a typical phone main camera (about a 69 degree horizontal field of view), that gives:
max distance = code width x frame width in pixels / (modules x 3 x 1.37)
1920 px frame (1080p): max distance ~ code width x 450 / modules
1280 px frame (720p): max distance ~ code width x 300 / modules
The 1.37 is the frame width at a distance of 1, from the field of view (2 x tan 34.5 degrees). “Code width” is the printed symbol without its quiet zone.
Example: a 5 cm code with 25 modules per side (a short link) reads up to about 90 cm on a 1080p frame and 60 cm on a 720p frame. The same 5 cm code with 45 modules (a long tracking URL) drops to about 50 cm and 35 cm.
Why URL Length Changes Scan Range
More data means more modules, so each module is smaller at the same printed size. A 16-character URL produces a Version 2 code (25 modules per side). A 111-character UTM-tagged URL produces Version 7 (45 modules). At the same size, the long URL’s modules are 44% smaller, and its scan range shrinks by the same share.
A reproducible test measured this directly. Codes at four URL lengths were shrunk to the size a 69 degree camera would see at each distance-to-size ratio, then blurred, noised, and decoded 20 times with zxing-cpp 3.1.1 and OpenCV 5.0.
| URL length (version) | Modules | Max ratio, 1080p frame | Max ratio, 720p frame |
|---|---|---|---|
| 16 characters (V2) | 25 | 25:1 | 15:1 |
| 29 characters (V3) | 29 | 20:1 | 10:1 |
| 57 characters (V4) | 33 | 15:1 | 10:1 |
| 111 characters (V7) | 45 | 10:1 | Fails at 10:1 |
“Max ratio” is the farthest setting where both decoders read at least 17 of 20 attempts. zxing-cpp alone reached further, down to about 1.9 pixels per module. This is a lab model with no focus error, motion, glare, or angle, so real phones fall short of these figures.
The 10:1 Rule and Where It Breaks
The widely quoted 10:1 rule says a code can be scanned from up to 10 times its width away. A 3 cm code reads from 30 cm, and a 30 cm poster code from 3 m. The test supports it for short and medium URLs on a 1080p frame.
It breaks for long URLs. A 111-character URL at 10:1 on a 720p frame gave OpenCV 1 read in 20. The rule ignores module count, so a code carrying a full UTM string needs to be printed larger, or encode less data. The 10:1 scan distance rule article converts distances into minimum print sizes by placement.
What Shortens Scan Range in Practice
Real conditions cut the lab range further:
- Viewing angle. Scanning from the side foreshortens the code and shrinks the modules along one axis.
- Low light and glare. Both cut contrast. Glossy laminate on a poster can blind the camera at some angles.
- Motion. People scan while walking past signs, and motion blur smears modules together.
- Low contrast colors. Pale or mid-tone modules lose edges first as distance grows.
- Too close. A code that overflows the frame, or sits inside the camera’s minimum focus distance, fails as well. Scan range has a near limit, not only a far one.
How to Increase QR Code Scanning Distance
- Shorten the encoded URL. A short redirect link keeps the code at Version 2 or 3, with the largest possible modules.
- Print the code larger. Range grows in direct proportion to printed width.
- Use level L or M error correction unless a logo needs H. Higher levels add modules for the same data.
- Keep dark modules on a light, matte background, with the full 4-module quiet zone.
- Test at the real distance, on an older phone, in the light the code will live in.
Frequently Asked Questions
How far away can a QR code be scanned?
A QR code can be scanned from about 5 to 25 times its printed width, depending on how much data it holds and the resolution of the scanner frame. Short URLs sit at the top of that range and long tracking URLs at the bottom. A 10 cm code with a short link reads from about 1.5 to 2.5 m in good light. Angle, glare, and motion reduce that.
What size should a QR code be to scan from 3 meters?
A QR code scanned from 3 meters should be about 25 to 30 cm wide for a short link. With a long UTM-tagged URL (Version 7), plan for 45 cm, from the 720p formula: 300 cm x 45 modules / 300 = 45 cm. Encoding a short redirect link instead lets the smaller size work.
Does a longer URL reduce scanning distance?
Yes. A longer URL needs more modules, so each module is smaller at the same print size. In testing, a 111-character URL reached only 10:1 on a 1080p frame, while a 16-character URL reached 25:1. Shortening the URL is the cheapest way to extend range.
Does error correction affect scanning distance?
Yes, indirectly. Higher error correction adds modules for the same data. The 111-character URL above is Version 6 at level L and Version 10 at level H (57 modules), which cuts scan range by about 20% against level M. Use H only when a logo or harsh conditions need it.
Can a QR code be too close to scan?
Yes. If the code fills more than the camera frame, or sits closer than the lens can focus, the scanner cannot read it. Moving the phone back a few centimetres usually fixes it. Very large codes, such as on billboards, also have a near limit for this reason.
To keep printed codes small and long-range, encode a short redirect link with the free dynamic QR code generator.