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.
| 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
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
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.
| 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.
- Product data with GTIN, batch and expiry? Use the GS1 DataMatrix generator.
- A long, low space? Use the rectangular generator.
- Hundreds of codes from a spreadsheet? Use the bulk generator.
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.