Methodology & Accuracy
Last reviewed: August 14, 2026
A pet tag gets scanned once, by a stranger, on the worst possible day to discover it does not work. This page documents how the numbers on this site are produced: how every code is verified before download, where the size rules come from, and what verification cannot see. Everything described here runs in your browser. Nothing you type is uploaded, stored, or seen by us.
Every code is decode-verified before download
Generating a QR code and reading one back are different operations, and only the second matters on the sidewalk. So every generated code is rendered at three raster sizes — 800, 1,200, and 1,600 pixels — and each raster is handed to jsQR, an independent decoder that reads the image the way a phone camera would. The decoded bytes are compared against your content byte for byte. The download stays blocked until at least two of the three rasters decode to an exact match.
Two of three, because a decoder can stumble at one particular pixel pitch for reasons unrelated to the code itself; two exact matches at different scales prove the code sound. And exact match, because "close" does not exist for contact details — a QR code that decodes to almost your phone number dials a stranger.
The 0.5 mm module floor
A module is the smallest square in the grid. To scan reliably with mainstream phone cameras at a natural distance, each module needs to print at about 0.5 mm; below that, ink spread, paper texture, and camera resolution start eating the grid. Every size shown on this site is computed from that floor, not from optimism.
Circles lose to the square root of two
A QR code is square. On a circular insert, the largest square that fits is the inscribed one: side = diameter ÷ √2. A 25 mm disc therefore holds 25 ÷ 1.414 ≈ 17.7 mm of code — the circle costs you nearly 30% of its width. A square insert keeps 94% of its width instead.
Now the payload math. A tel: code — the mode that dials on scan — lands at QR version 1 or 2: 21 or 25 modules on a side, or 29 or 33 across once the quiet zone (four modules per side) is added. On that 25 mm disc, 17.7 mm ÷ 33 ≈ 0.54 mm per module — just above the floor, which is why tel mode fits a 25 mm circle. A vCard carrying a pet name, two numbers, and a note needs a denser grid and generally wants a 32 mm circle or a square insert. The tools work this out for every preset from 20 to 38 mm — the full geometry is on the insert spec.
Error correction level M
QR codes carry recovery data at four levels, from L (about 7% recoverable) to H (about 30%). Codes here use level M, about 15%. Higher levels sound safer, but extra recovery data means more modules, and at a fixed insert size, smaller ones — trading away scannability at the module floor to buy damage tolerance that a sealed, flat print does not need.
The quiet zone lives inside the cut line
The four-module white border around a QR code is part of the code, not decoration — scanners use it to find the grid. On the insert sheets, the quiet zone sits inside the printed square, so the hairline cut guides never touch it. Cut on the line and the code is still whole.
What the tool refuses to do
It refuses to hand over a download that failed 2-of-3 verification. And it refuses to pretend a payload fits a size: a loaded vCard on a 25 mm circle would push modules below the floor, and the tool says so instead of producing it. This matters because on-screen verification would still pass — an 800-pixel raster has no idea it is destined for 17.7 mm of paper — and a code that verifies perfectly but prints unscannably is exactly the failure this site exists to prevent.
What verification cannot see
First, physics: verification proves the code decodes from a clean raster. It cannot prove a particular phone will read a scratched, dirty tag in the dark at arm's length. A QR tag improves the odds of a reunion; it does not guarantee one.
Second, your printer. If it is set to "fit to page," everything shrinks — including the modules, possibly below the floor. The sheets are laid out for 100% scale and carry a printed reminder to that effect, but verification happens before ink, and we cannot see what your printer did.
Third, resin. A heavy resin dome acts as a lens and distorts modules near the edge. Verification sees a flat raster, not your finished tag, so keep the code face flat or low-domed and put the jewelry dome on the back — the epoxy guide covers this.
If a number on this page looks wrong to you, that is precisely the report we want — use the contact page.