datamatrix: GS1 DataMatrix support added
This addresses https://github.com/boombuler/barcode/issues/75 in order to generate a compliant GS1 DataMatrix when the FNC1 character is used as a start character in the barcode.
The FNC1 character may also be used as a separator between GS1 element strings that do not have a pre-defined length.
From the GS1 DataMatrix guidelines:
2.2.1 Function 1 Symbol Character (FNC1)
By definition in ISO/IEC 16022 GS1 DataMatrix uses a special
start sequence to differentiate GS1 DataMatrix from other
ISO/IEC Data Matrix symbols. This is achieved by using the
Function 1 Symbol Character (FNC1) in the first position of
the data encoded. It enables scanners to process the
information according to the GS1 System Rules.
The FNC1 (codeword 232) has two separate uses in GS1 DataMatrix:
■ Start character.
■ Separator character to separate element strings that are not
in the predefined list
This has been tested by using dmtxread to generate codewords from examples in the GS1 DataMatrix Guideline.
@boombuler, I'd appreciate a look at this PR when you get an opportunity. Is there anything else you might want covered here?
We've been running this in production for around a week now and have additional validation from a carrier that their scanners can read the resulting GS1 DataMatrix symbols.