How much damage can a QR code take?

A QR Code spends roughly a fifth to a third of its modules on Reed-Solomon parity — the redundancy that lets a scanner repair what a scratch, a glare or a coffee mug destroyed. Build a symbol, damage it on purpose, and watch the repair budget run out. Everything runs in your browser.

  1. Build the symbol.Type a payload, pick an error correction level and a version, and see the data and parity codewords it splits into.
  2. Damage it.Paint on single modules, cover finder or timing patterns, or simulate noise, blur, low contrast and more.
  3. Read it.Decode the result with Dynamsoft Barcode Reader and watch where each level stops recovering.

The symbol

Byte mode. The version grows to fit — up to version 10 here.

Error correction level

Drag on the symbol to damage modules

  • Data codeword
  • Error correction codeword
  • Function pattern
  • Damaged module

Click any module to see which codeword it carries.

Correction capacity at this version

A block repairs up to half of its parity codewords as errors (⌊EC/2⌋ per block).

Damage it

Module damage and capture defects are independent — combine them.
Paint modules

Drag across the symbol. Painted modules flip to a fixed random value, like a real scratch.

Target a pattern

Function patterns carry no parity — a scanner that cannot find or orient the symbol never reaches error correction.

15%

Seeded, so the same percentage always damages the same modules.

40%
0.0% modules damaged No damage yet

Can a reader still read it?

The reader loads on the first decode. Decoding uses the clean render plus your damage — never the structure colours.

Damage Result Time Source

Damage the symbol, or run the sweep, to fill this log.

QR anatomy: what every part is called

Rendered from the symbol above — switch level or version and it redraws. Hover a term to light it up.
How to read these numbers

The symbol is encoded by a QR Code (ISO/IEC 18004) encoder that runs in this page: byte mode, any version up to 10 here, all four error correction levels, and the standard mask search. The module damage you paint or randomize is exact — the demo knows which codeword every module belongs to, so the budget meter counts real corrupted codewords, not an estimate.

The budget model follows the standard: a Reed-Solomon block of e parity codewords repairs up to ⌊e/2⌋ corrupted codewords per block under error decoding (erasure decoding, which a scanner can only use when it knows where the damage is, can do better). Damage to finder, timing, alignment, format or version modules is outside that budget entirely — error correction repairs codewords, not the scaffolding a scanner needs to find the symbol.

The capture defect presets (noise, blur, low contrast, occlusion, crop, shadow, rotation) are rendered onto the same canvas a camera would have produced, and their damage percentage is estimated by sampling each module's centre pixel against its intended value. Decode outcomes apply to Dynamsoft Barcode Reader at default settings on the damaged render; another reader, another resolution or a print-and-scan round trip can shift the boundary, and a successful decode never guarantees reliable scanning on every device.

The SDK downloads its engine and contacts Dynamsoft for license activation; the hosted demo uses the CodePool domain license, and local or self-hosted previews use the SDK trial license. The payload you type and the damaged image never leave the page.