Barcodes and Error Correction

Error Correction in Barcodes

I’m a huge fan of 2D barcodes – whether the Datamatrix for industrial applications, QR Codes for cool marketing (and some industrial) stuff and Microsoft Tag for its design features – I use them all!

While one of the huge advantages of 2D over linear barcodes is the fact more data can be encoded into a given space, another important factor is that most 2D barcode symbologies have built in error correction which makes the printed code more robust. Parts of it can be missing and the code can still be read.

The 2D barcode we use the most here at the WincoPlex, is the Datamatrix Code. In this example (a Datamatrix encoded for MIL-STD-130) you can see I’ve chosen Symbol Type ECC200.

MIL-STD-130 Datamatrix Error Correction Level

The ECC value isn’t really the Symbol Type as BarTender labels it – it is the level of error correction encoded into the symbol. If I had opened the drop-down to show the different possible values of ECC, it would show values including ECC 000, ECC 010, ECC 040, up to ECC 140 – ending with the ECC 200 I had chosen for this job.

As explained in a White Paper from Code Corporation the ECC levels of less than ECC 200 use a type of error correction called Convolutional Coding. This had been used in the early versions of the Datamatrix specification, but were replaced with ECC 200 as Datamatrix became more of an international standard.

The ECC 200 error correction is based on Reed-Solomon principles, named after two MIT guys, who developed these ideas back in 1960. Reed-Solomon error correction is employed in many of the modern 2D barcodes, such as PDF417 and QR as well as in Datamatrix.

This type of error correction is proven to work very well. In the Datamatrix for example, as much as 25% of the content area of the code symbol can be damaged and the barcode can still ECC200 and ECC000 Datamatrix Codesbe decoded. Of course, all this error correction means the symbols are a little larger than they would normally be, but since the 2D barcodes are economical with the space they need, this isn’t usually an issue.

The example here shows the same MIL-STD-130 Datamatrix code encoded with both ECC 200 and ECC 000 (no error correction) to show the difference in size.

In reality, I don’t believe I’ve ever printed a Datamatrix code that wasn’t ECC 200, and I’ve printed them for 100’s of clients. Most standards that call for Datamatrix specify ECC 200 and it is a good practice anyway, even if not specified.

If printing MIL-STD-130 UID labels, the barcode will fail verification if ECC 200 isn’t used.

Want to learn more about Reed-Solomon error correction? Look no further than the Wikipedia entry – real geeky stuff!

Do you use 2D barcodes in your operations? We are always happy to help if you need us – just use the contact page.

 

Share Button

Comments

  1. Jan Kovar says:

    Hello.
    We are using DataMatrix 8×32 with 20 num. characters capacity. By ISO16022 with ECC200. When we try to use DataMatrix 8×32 with 12 num. characters, can we make error correction more robust? Or can we generaly say, if we increase the redundancy, we can read DataMatrix better if it is broken?

    Thank you in advance for your explanation.

  2. David Holliday says:

    Hi Jan,
    Here are the two possibilities you mentioned:

    I’m not an expert on this, but my feeling is that the error correction will be about the same in either case.

Speak Your Mind

*