Data Matrix ECC 200, explained

The version of Data Matrix used today, and the error correction that lets a scuffed code still scan.

Updated 7 min read By the Data Matrix Code Generator team

On this page 7 sections
  1. Short answer
  2. How the error correction works
  3. How much damage it survives
  4. ECC 200 vs ECC 000–140
  5. ECC 200 sizes
  6. Make an ECC 200 code
  7. FAQ

Short answer

ECC 200 is the current version of Data Matrix, defined in ISO/IEC 16022. It protects the data with Reed–Solomon error correction, so a code can still be read when part of it is dirty, scratched or missing.

Every code made by this generator is ECC 200. The older ECC 000–140 versions are obsolete and should not be used for new applications.

If you were asked for “ECC 200” or “Data Matrix ECC200”, any modern Data Matrix generator gives you one: our free ECC 200 Data Matrix generator makes nothing else. The rest of this guide explains what the error correction does, measures how much damage real codes survive, and shows how ECC 200 differs from the old versions. For the basics, start with what a Data Matrix code is.

How Reed–Solomon error correction works (plain words)

A Data Matrix does not store your text as one long string of squares. The encoder first turns it into codewords: 8-bit units, each drawn as a little cluster of eight modules (small squares). Then it adds error-correction codewords: extra codewords calculated from the data with the Reed–Solomon method, the same family of maths used on CDs and in QR codes.

When a scanner reads the code, it checks the data codewords against the error-correction codewords. If some codewords come out wrong, because of a scratch, a smudge or a missing patch, the scanner can work out what they should have been. There is a fixed budget:

  • Unknown damage: it can fix up to half as many wrong codewords as there are error-correction codewords.
  • Known damage (the scanner can tell which codewords are unreadable, called erasures): from 14 × 14 up it can fix more, about one and a half to two times as many (7 instead of 5 at 14 × 14, 590 instead of 310 at 144 × 144). ISO/IEC 16022 lists both limits for every size, and for the two smallest squares, 10 × 10 and 12 × 12, it lists no erasure capacity at all.
  • Big codes split the budget. From 52 × 52 up, the codewords are dealt into several interleaved blocks, each with its own error correction, so a single scratch is spread across blocks instead of overwhelming one.

Worked example. A 24 × 24 code has 60 codewords: 36 for data and 24 for error correction (40% of the code). The scanner can therefore fix up to 12 wrong codewords anywhere in the symbol, whatever the data says. The size is fixed by the data length; you cannot choose a “higher” or “lower” error correction level in ECC 200, unlike QR codes.

Error correction in every square and rectangular ECC 200 size, from the encoder's own size table (engine v2.0.1), with our measured damage limit.
Size (modules) Data + error-correction codewords Error correction share Blocks Fixes up to (codewords) Largest blot that still read
10 × 10 3 + 5 62.5% 1 2 25.0% of codewords 2 × 2 modules 4.0% of the area
12 × 12 5 + 7 58.3% 1 3 25.0% of codewords 3 × 3 modules 6.3% of the area
14 × 14 8 + 10 55.6% 1 5 27.8% of codewords 4 × 4 modules 8.2% of the area
16 × 16 12 + 12 50.0% 1 6 25.0% of codewords 5 × 5 modules 9.8% of the area
18 × 18 18 + 14 43.8% 1 7 21.9% of codewords 5 × 5 modules 7.7% of the area
20 × 20 22 + 18 45.0% 1 9 22.5% of codewords 7 × 7 modules 12.3% of the area
22 × 22 30 + 20 40.0% 1 10 20.0% of codewords 7 × 7 modules 10.1% of the area
24 × 24 36 + 24 40.0% 1 12 20.0% of codewords 8 × 8 modules 11.1% of the area
26 × 26 44 + 28 38.9% 1 14 19.4% of codewords 9 × 9 modules 12.0% of the area
32 × 32 62 + 36 36.7% 1 18 18.4% of codewords 12 × 12 modules 14.1% of the area
36 × 36 86 + 42 32.8% 1 21 16.4% of codewords 13 × 13 modules 13.0% of the area
40 × 40 114 + 48 29.6% 1 24 14.8% of codewords 14 × 14 modules 12.3% of the area
44 × 44 144 + 56 28.0% 1 28 14.0% of codewords 15 × 15 modules 11.6% of the area
48 × 48 174 + 68 28.1% 1 34 14.0% of codewords 17 × 17 modules 12.5% of the area
52 × 52 204 + 84 29.2% 2 42 14.6% of codewords 18 × 18 modules 12.0% of the area
64 × 64 280 + 112 28.6% 2 56 14.3% of codewords 21 × 21 modules 10.8% of the area
72 × 72 368 + 144 28.1% 4 72 14.1% of codewords 24 × 24 modules 11.1% of the area
80 × 80 456 + 192 29.6% 4 96 14.8% of codewords 27 × 27 modules 11.4% of the area
88 × 88 576 + 224 28.0% 4 112 14.0% of codewords 30 × 30 modules 11.6% of the area
96 × 96 696 + 272 28.1% 4 136 14.0% of codewords 33 × 33 modules 11.8% of the area
104 × 104 816 + 336 29.2% 6 168 14.6% of codewords 36 × 36 modules 12.0% of the area
120 × 120 1,050 + 408 28.0% 6 204 14.0% of codewords 43 × 43 modules 12.8% of the area
132 × 132 1,304 + 496 27.6% 8 248 13.8% of codewords 47 × 47 modules 12.7% of the area
144 × 144 1,558 + 620 28.5% 10 310 14.2% of codewords 53 × 53 modules 13.5% of the area
8 × 18 5 + 7 58.3% 1 3 25.0% of codewords 4 × 4 modules 11.1% of the area
8 × 32 10 + 11 52.4% 1 5 23.8% of codewords 6 × 6 modules 14.1% of the area
12 × 26 16 + 14 46.7% 1 7 23.3% of codewords 5 × 5 modules 8.0% of the area
12 × 36 22 + 18 45.0% 1 9 22.5% of codewords 8 × 8 modules 14.8% of the area
16 × 36 32 + 24 42.9% 1 12 21.4% of codewords 9 × 9 modules 14.1% of the area
16 × 48 49 + 28 36.4% 1 14 18.2% of codewords 9 × 9 modules 10.5% of the area

“Fixes up to” is the Reed–Solomon limit for unknown damage: half the error-correction codewords in each block. It matches the figures in ISO/IEC 16022 and the GS1 DataMatrix Guideline. The last column is our measurement, explained below. The 18 DMRE sizes are in the size chart and its CSV.

How much damage can ECC 200 survive?

You will often read that a Data Matrix survives “up to 30% damage”. The honest answer is: it depends on the size, on where the damage is and on the scanner. So we measured it. While building this page, we encoded a real 24 × 24 code, wiped a growing square out of its middle, and decoded each image with zxing-cpp (zxing-wasm), an independent decoder that shares no code with our encoder:

  • Reads

    No damage

    the original

  • Reads

    4 × 4 modules wiped

    2.8% of the code

  • Reads

    8 × 8 modules wiped

    11.1% of the code

  • Did not read

    9 × 9 modules wiped

    14.1% of the code

  • Did not read

    12 × 12 modules wiped

    25.0% of the code

Decoded by zxing-cpp (zxing-wasm) when this page was built. The dashed outline shows the wiped area; it was not part of the decoded image. Each “Reads” returned exactly “PART-000123 LOT A2611”.

This code still read with an 8 × 8 square wiped out, 11.1% of its area, and failed one step later. Across every square and rectangular size, filled to capacity with digits, a solid light or dark blot in the middle could cover 4–15% of the code's area before the code stopped reading (last column of the table above).

Why is that well below the share of codewords Reed–Solomon can fix?

  • A codeword's eight modules are spread out in an L or block shape, so a blot of any shape clips many codewords partly, and a partly hit codeword is still a wrong codeword.
  • A blot in the middle also hits the internal finder and clock lines of bigger codes, which the scanner needs to find the grid.
  • The error correction protects the data only. If the solid L-shaped edge or the dotted edges are damaged, a scanner may not find the code at all.

What these numbers do and don't show

They are measured on clean digital images with one decoder, and one kind of damage. Print blur, glare, curved surfaces and other scanners will change them. Treat error correction as a safety margin for wear and tear, not as space you can use on purpose.

ECC 200 vs ECC 000–140

The first Data Matrix versions were named after their error-checking levels: ECC 000, 050, 080, 100 and 140. ECC 200 replaced them with a different design built on Reed–Solomon error correction. ISO/IEC 16022:2006 allowed the old versions only in closed applications. The current edition, ISO/IEC 16022:2024, removed them, so the standard now covers ECC 200 only. GS1 specifies ECC 200 only. The 2024 edition also made rectangular sizes and ECI support required features for readers.

ECC 200 compared with the older ECC 000–140 versions.
Feature ECC 200 ECC 000–140
Error correction Reed–Solomon Convolutional coding (none at ECC 000)
Sizes 24 squares, 10 × 10 to 144 × 144; 6 rectangles, 8 × 18 to 16 × 48; plus 18 DMRE rectangles Squares only, 9 × 9 to 49 × 49
Rows and columns Always even, so the top-right corner module is always light Always odd
Status Current; required for GS1 DataMatrix Legacy; removed from ISO/IEC 16022 in 2024
Made by this generator Yes, always No

How to tell them apart: count the squares along one edge of the dotted clock track. An even number (10, 12, 14…) means ECC 200. You will almost never meet an odd-sized one outside an old closed system.

ECC 200 sizes

ECC 200 comes in 24 square sizes from 10 × 10 to 144 × 144 modules and 6 rectangles from 8 × 18 to 16 × 48. The rectangular extension DMRE (ISO/IEC 21471) adds 18 more. The smallest holds 6 digits; the largest holds 3,116 digits or 2,335 uppercase letters and digits. The encoder picks the smallest size your data fits, and error correction grows with it. See every ECC 200 size with its capacity, or use the size calculator there.

Make an ECC 200 code

You do not need to choose anything: every code from our ECC 200 generator is ECC 200 with full Reed–Solomon error correction, checked by decoding it back before you download. Type your text, pick square or rectangle, and download a PNG, SVG or true-size PDF.

In other software, if a barcode setting asks for an ECC level, choose 200. And keep the code plain: no logo in the middle, no rounded or colored squares. Error correction is there for wear and tear, not for decoration.

Frequently asked questions

What does ECC 200 mean?
ECC 200 is the current version of Data Matrix, defined in ISO/IEC 16022. “ECC” stands for error checking and correction; ECC 200 protects the data with Reed–Solomon error correction, so a code can still be read when part of it is dirty, scratched or missing. The older versions were called ECC 000 to ECC 140.
Is every Data Matrix ECC 200?
Nearly every Data Matrix in use today is. The older ECC 000–140 versions were removed from the standard in its 2024 edition (the 2006 edition allowed them only in closed applications), and GS1 allows only ECC 200. Every code made by our generator is ECC 200, and there is no setting to change.
How much damage can a Data Matrix code take?
It depends on the size and on where the damage is. Reed–Solomon can fix up to half as many codewords as the code has error-correction codewords: about 14–28% of all codewords, depending on size. In our build-time test, a solid blot in the middle of the code could cover 4–15% of the code's area before it stopped reading. Damage to the solid L-shaped edge can stop a read much sooner, because the scanner needs that edge to find the code.
Can I put a logo in a Data Matrix because of error correction?
No. A logo spends the error correction before the code has suffered any real-world damage, so the first scuff or smudge can make it unreadable. GS1 and our generator keep the code plain: dark squares on a light background, with logos and text outside the quiet zone.