How much damage can a PDF417 barcode take?

A PDF417 symbol is a stack of rows, and every row carries its own copy of what a scanner needs to find it: a start pattern, row indicators, a stop pattern. Inside sits a single Reed-Solomon block whose parity budget you choose — 2 codewords at level 0, 512 at level 8. Build a symbol, damage it on purpose, and watch the budget and the reader disagree.

  1. Build the symbol.Type a payload, pick an error correction level, and see how many codewords go to data, padding and parity.
  2. Damage it.Wipe codeword cells, scratch a row, cover the row indicators, or simulate noise, blur, low contrast and more.
  3. Read it.Decode the result with Dynamsoft Barcode Reader and compare the corrupted codewords against the repair budget.

The symbol

Text compaction for the PDF417 text set, byte compaction (UTF-8) for anything else.

Error correction level

Drag on the symbol to wipe codeword cells

  • Payload codeword
  • Padding codeword
  • Error correction
  • Indicators & guards
  • Damaged

Click a cell to see the codeword it carries.

Parity share of the symbol, all nine levels

A PDF417 level is an absolute codeword count, not a percentage: level 2 always spends 8 codewords on parity, so the share falls as the payload grows.

Damage it

Codeword damage and capture defects are independent — combine them.
Wipe codeword cells

Drag across the symbol. A wipe fills the whole 17-module cell, so the codeword is destroyed, not merely nudged.

Target a region

Row indicators carry the row number, the row and column count and the level — no parity protects them. Neither do the start and stop patterns.

20%

Seeded: the same percentage always wipes the same codeword cells.

50%
0 codewords corrupted 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.

Corrupted Result Time Source Image

Damage the symbol, or run the sweep, to fill this log. Every row keeps the exact image it decoded — download it from the Image column.

PDF417 anatomy: what every part is called

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

The symbol is encoded in this page by a PDF417 (ISO/IEC 15438) encoder: text compaction for the PDF417 text set, byte compaction (UTF-8) for anything else, Reed-Solomon parity over GF(929), and the standard layout — start pattern, left row indicator, n data cells, right row indicator, stop pattern, repeated for every row. Its output is bit-identical to a reference BWIPP encoder for payloads inside the text set, which is how the encoder was checked. Numeric compaction, ECI and Macro PDF417 are not implemented; digits ride the Mixed sub-mode.

Codeword damage is exact. A PDF417 codeword is one 17-module cell, so the page compares every cell against the clean symbol and counts the cells that changed. That count is what the budget meter shows. A single Reed-Solomon block of k = 2^(level+1) parity codewords repairs up to ⌊k/2⌋ corrupted codewords when the decoder has to find the errors itself, and up to k when it knows where they are — Reed-Solomon calls those erasures, and a wiped cell is unreadable by construction, so it is an erasure. The bar carries both marks: the solid tick is ⌊k/2⌋, the dashed one is k. A corrupted parity codeword costs exactly as much as a corrupted data codeword; the decoder cannot tell which one was hit until it tries.

Three failure modes are counted separately because they are not interchangeable. Codeword damage is what parity repairs. Row indicator damage — the left and right cells beside every row, which encode the row number, the symbol size and the level — is a detection failure: a reader that cannot line the rows up never reaches Reed-Solomon. And damage to the start or stop pattern can stop the symbol being found at all. The meter reports all three so a failed decode can be read instead of guessed at.

The capture defect presets (noise, blur, low contrast, low resolution, occlusion, crop, shadow, tilt) are rendered onto the same canvas a camera would have produced, and their codeword damage is estimated by sampling each module's centre 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.