Daily Dose of Curious

040

Daily Dose of Curious

HOW IT WORKS

How does a QR code still scan when part of it is missing?

10 OCT 2026CURIOSITY

The level of correction is chosen when the code is made — from about seven per cent of symbols recoverable up to about thirty. The higher levels are why a code with a logo printed over the middle of it still works, and why a code printed small for a label is often set to the highest level it can afford.

Because a good deal of what is printed is not the message. Extra symbols are added when the code is made, and they carry enough information to rebuild whatever the damage took away.

What actually happens

  1. The scanner finds its bearings

    The three large squares in the corners tell it where the code is, which way up it is and how it is distorted by the angle you are holding the camera at.

  2. The data is spread out

    The message is not laid down in one place. It is cut into blocks and interleaved across the whole symbol, so neighbouring dots usually belong to different blocks.

  3. Check symbols come along too

    Each block is stored with extra symbols computed from it. They are not a copy; they are enough information to work out what is missing.

  4. The decoder rebuilds it

    Reed-Solomon arithmetic reconstructs the lost symbols from the survivors, as long as no block lost more than the check symbols can cover.

The clever bit

Interleaving is what makes the damage survivable. A blot that would destroy one block outright instead takes a little from many, and a little from many is exactly what the correction is good at. Spreading the data out is what turns one fatal wound into several recoverable scratches.

The words

Interleaving
Spreading data out so that damage in one place is shared thinly between many blocks.
Error correction
Extra information stored alongside a message so the original can be worked out after part of it is lost.

Where this comes from

  • ISO/IEC 18004 — QR Code symbology: error correction levels and interleaving
  • Reed-Solomon codes — block error correction over finite fields

This one is not an opinion. It is how the thing works, and these are what that rests on.

Share this dose