DotCode is two-dimensional (2D) matrix barcode invented in 2008[1] by Hand Held Products company to replace outdated Code 128.
At this time, it is issued by Association for Automatic Identification and Mobility (AIM) as “ISS DotCode Symbology Specification 4.0”.
DotCode was developed to use with high-speed industrial printers[3] where printing accuracy can be low.
Because DotCode by the standard does not require complicated elements like continuous lines or special shapes it can be applied with laser engraving or industrial drills.
DotCode can be represented as rectangular array with minimal size of each side 5X dots.
As an extension of Code 128 barcode, DotCode allows more compact encoding of 8-bit data array and Unicode support with Extended Channel Interpretation feature.
Additionally, DotCode provides much more data density and Reed–Solomon error correction which allows to restore partially damaged barcode.
However, the main DotCode implementation, the same as Code 128, is effective encoding of GS1 data[5] which is used in worldwide shipping and packaging industry.
DotCode barcode was invented in 2008[1] by Dr. Andrew Longacre from Hand Held Products company and standardized in 2009[6] by AIM as “Bar code symbology specification - DotCode”.
At this time, it is used mostly to encode GS1 data in tobacco,[10][11] alcoholic and non-alcoholic beverage,[12] pharmaceutical and grocery industries.
[citation needed] All data, metadata and error correction codewords are encoded in the same dots array which does not have any visual difference.
The mask pattern is applied only to data sequence and does not affect error correction codewords.
[2]: 5.2.4 DotCode uses Reed–Solomon error correction[2]: 5.3 with prime power of 3 and finite field
It uses the following rules: As we see in the following table, Binary Latch encodes data more effectively, starting from 3 bytes.
[2]: 5.2.1.2 FNC1 in the other than the first position works as GS1 Application Identifier splitter and decoded as GS (ASCII value 29) character.
FNC3 in the first codeword position indicates that the message[2]: 5.2.1.2 is the instructions for initialization or reprogramming of the bar code reader.
In this way we need to pad data codewords in case with have free space.