The symbol
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.Drag across the symbol. A wipe fills the whole 17-module cell, so the codeword is destroyed, not merely nudged.
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.
Seeded: the same percentage always wipes the same codeword cells.
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.