Free QR Code Color Contrast Checker

Pick your two colours and see the symbol contrast a scanner actually measures — plus the separate answer for red-light barcode verifiers.

Nothing you type leaves your device. The colours are converted and scored by plain JavaScript running in your own browser. No upload, no account, no logging — so you can check an unreleased brand palette safely.

Hex, with or without the #. Three-digit shorthand works too.

This is the colour behind the pattern, not the colour of the whole page.

Try a common pairing

Preview

Illustrative pattern, not a scannable code.

Contrast measurements for the chosen colour pair
Measured as Symbol contrast Grade

How this is calculated

Almost every QR colour checker online scores your palette with a WCAG contrast ratio — the 4.5:1 figure from web accessibility guidelines. That number was designed to predict whether a human can read small text. It is not the measure any barcode standard uses, and it is not what decides whether a scanner resolves your modules.

Barcode print quality is graded by ISO/IEC 15415 (2D symbols) and ISO/IEC 15416 (linear). Both define symbol contrast as a plain subtraction of reflectances, not a ratio:

SC = Rmax − Rmin

Rmax is the reflectance of the lightest area in the symbol and Rmin the darkest, each expressed as a percentage. The difference between them is the grade input. A symbol contrast of 70% or more earns the top grade of 4.0; below 20% the grade collapses toward 0.

A worked example of why the ratio misleads

Take a mid grey, #808080, on white. Its relative luminance is 0.2159, so:

WCAG contrast ratio (1 + 0.05) / (0.2159 + 0.05) = 3.95:1 Fails the 4.5:1 rule
ISO symbol contrast (100 − 21.59) = 78.4% Grade 4.0 — the top band

Same two colours. One metric says reject, the other says this is as good as grading gets. The ratio compresses the top of its scale, so it punishes a mid grey that a decoder finds trivially separable. Follow the accessibility number and you throw away palettes that would have scanned perfectly well.

The reverse trap is worse, and it is the one below.

Why two numbers, not one

Reflectance depends on the light you measure under, and the two things that will read your code do not use the same light.

  • A phone camera works in ordinary white light and sees roughly what your eye sees. The tool estimates that reflectance from the colour's relative luminance, weighting the red, green and blue channels the way human vision does.
  • A barcode verifier — and many fixed retail scanners — illuminate at 660 nm, in the red. Red ink reflects red light almost as well as white paper does, so a red pattern can be close to invisible to that hardware while looking perfectly bold to your eye. The tool estimates that second reflectance from the red channel alone.

A common brand red, #dc2626, on white makes the point exactly. To a camera it is 83.3% symbol contrast — grade 4.0, as clean as black. At 660 nm it is 28.4%, which grades 1.4. GS1 states its minimum quality for a retail symbol as a grade of 1.5 measured through a 10-mil aperture at 660 nm — written 1.5/10/660 in its specifications. So that red misses the bar, on a measurement your phone will never show you. Pure #ff0000 is the limit case: it reflects red light exactly as well as white paper, giving 0% contrast and a grade of 0.

If your code is decorative marketing read by phones, the camera column is the one that matters and a red code is fine. If it is a GS1 code that has to pass a verifier — a Digital Link on retail packaging, for example — the 660 nm column is the one that will be measured, and the tool flags the gap when the two disagree.

What this tool is not

It is an estimate from screen colours, and it is honest about the gap. A real verifier measures reflected light off the finished substrate through a defined aperture, so ink soak on uncoated board, the gloss of a varnish, and the whiteness of the stock all move the result. Two identical hex values can grade differently on kraft and on coated card. Treat a strong result here as "worth printing and testing", never as a certificate — and if the code must pass GS1 verification, verify the printed article.

The grade ladder is anchored on the published band edges — 70% for grade 4, and the collapse to 0 below 20% — and interpolated between them, matching the continuous grading the 2024 revision of ISO/IEC 15415 uses. As a check: a symbol contrast of 30% is published as grade 1.5, and that is exactly what this calculator returns.

When you need this

A designer has put the code in brand colours

The most common failure on this site's inbox-equivalent. Brand palettes are chosen for how they look next to each other, not for reflectance separation. Check the pair before the artwork goes to print, not after.

The code sits on coloured packaging

Kraft board, a tinted carton, a dark label stock. The background is rarely white in the real world, and a mid-tone background eats symbol contrast quickly.

Someone wants the code inverted

White modules on a dark background looks striking. ISO/IEC 18004 does describe symbols produced with reflectance reversal, but reader support is not guaranteed — plenty of hardware scanners and older camera apps expect dark-on-light and simply will not lock on. The tool flags an inverted pair explicitly rather than scoring it as if it were normal.

The code has to pass retail verification

A GS1 Digital Link QR on retail packaging is graded like any other GS1 symbol, at 660 nm. Check the verifier column before committing to a colour, and read the GS1 Sunrise 2027 background if the code is replacing a barcode at the till.

Get the rest of the code right too

Colour is one of three things that decide whether a printed QR code scans. The other two are size and data density, and they interact — a long URL needs a denser grid, and a denser grid needs both more width and cleaner contrast to survive.

Frequently Asked Questions

What contrast ratio does a QR code need?

Barcode standards do not use a contrast ratio at all. ISO/IEC 15415 grades 2D symbols on symbol contrast, which is a subtraction of reflectances — the lightest reflectance minus the darkest, as a percentage. 70% or more earns the top grade of 4.0, and below 20% the grade falls away to 0. The 4.5:1 figure quoted by most QR colour guides is the WCAG threshold for reading text, borrowed from a different problem.

Can a QR code be any colour?

Any pair with enough reflectance separation, with two practical limits. The pattern needs to be the darker of the two, because most readers expect dark modules on a light background. And red is a special case: red ink reflects red light, so a red pattern that looks bold to your eye can be nearly invisible to the 660 nm light a barcode verifier or retail scanner uses.

Why does this tool give two different grades?

Because the two things that will read your code do not use the same light. A phone camera works in ordinary white light and sees roughly what you see, so its column is weighted the way human vision is. A verifier illuminates at 660 nm in the red, where a red pattern nearly disappears. Marketing codes live or die by the camera column; GS1 codes that face verification are judged on the 660 nm one.

Do inverted QR codes work?

Sometimes, and you cannot rely on it. ISO/IEC 18004 describes symbols produced with reflectance reversal, so a white-on-black code is a legitimate construction, but support is optional in practice. Modern phone cameras often manage it; many hardware scanners and older camera apps expect dark-on-light and will not lock on. If the design needs a dark background, place the code in a light panel with its quiet zone inside the panel.

Why did my red QR code pass on my phone but fail at the printer?

Almost certainly the 660 nm problem. Your phone camera sees red as clearly darker than white paper; a barcode verifier lighting the symbol in red light sees very little difference, because red ink reflects most of that light back. This tool reports both numbers side by side, and flags the pair explicitly when it reads well to a camera and collapses under red light.

Is this the same as a real barcode verification?

No. A verifier measures reflected light off the finished printed article through a defined aperture, and grades several other parameters besides contrast — modulation, fixed pattern damage, axial non-uniformity and more. This tool estimates symbol contrast from screen colours only. It is the right check at the design stage, and it is not a substitute for verifying the printed code when a retailer or a standard requires a grade.

Does the paper or packaging change the result?

Yes, often more than the hex values do. Uncoated and recycled stock absorbs ink, so dark modules spread and light areas start greyer than white; kraft board begins at a mid-tone that eats symbol contrast before you have printed anything. A varnish or a glossy laminate adds specular reflection that can defeat a scanner outright. Treat a strong score here as permission to print a proof, not as a result.

Is my colour data sent anywhere?

No. The checker is plain JavaScript running in your browser, with no network requests and no storage. Nothing you type is uploaded, which is the point if you are checking a brand palette that has not been announced yet.

The Only Test That Settles It Is a Real Scan

A calculator scores the colours; it cannot see your paper, your ink or the light in the room. Print a proof and scan it with Scan & Generate where the code will live — on the shelf, on the table, under the actual lighting.