Printing Labels with GS1 DataMatrix – Software Guide

This guide explains how to create and print labels and other media featuring GS1 DataMatrix with our labeling software Barcode Forge.
The content encoded in GS1 DataMatrix can also be printed as text on the label, as shown in the image. This represents the simplest form of a label, which you can further customize by adding text, barcode or graphic elements according to your needs.
GS1 DataMatrix – Maximum Security through Data Validation in the Software
GS1 DataMatrix codes are used in a wide range of industries, including sensitive sectors such as food and healthcare, where data integrity and traceability are paramount. To meet these high standards, our label software performs additional data validation checks beyond the built-in security mechanisms of the GS1 DataMatrix.

Before printing a GS1 DataMatrix on a label, the software verifies date values such as the production date and expiry date to ensure their validity. It also validates key identifiers like GTIN and SSCC against their check digits. Other data elements are checked for compliance with prescribed formats, such as allowed characters and length.
If the software detects any errors in the data to be encoded, it displays a detailed error description in the label preview instead of the GS1 DataMatrix code, allowing you to correct issues before printing.
Through these extensive checks, our label software minimizes input errors and ensures that the resulting GS1 DataMatrix codes meet the security standards required in critical applications.
GS1 DataMatrix basics – The difference from DataMatrix
The term "DataMatrix" refers to a barcode format, similar to the QR Code, that translates any type of information into a pattern of dots and spaces typical of two-dimensional codes.
"GS1 DataMatrix", on the other hand, specifies a standard that uses DataMatrix codes as a data carrier to store specific types of information. This standard is managed by the global GS1 organization to enable product identification and traceability throughout global supply chains.

A GS1 DataMatrix can encode information such as the Serial Shipping Container Code (SSCC), Global Trade Item Number (GTIN), production and expiry dates, and approximately 150 additional data types listed in the appendix.
A GS1 DataMatrix includes the FNC1 character, which serves as an identifier to distinguish it from a standard DataMatrix. The FNC1 character is placed before the encoded content, enabling barcode scanners to immediately switch to the correct processing mode and interpret the data properly. Our label software inserts the FNC1 character automatically, so you don’t need to insert it manually.
Summary: While "DataMatrix" refers to a generic barcode format, "GS1 DataMatrix" represents a structured type of information stored in DataMatrix codes.
Creating and Printing GS1 DataMatrix Labels using the Software
An example project [download link] serves as the basis for the following
explanations. It contains a simple label with a GS1 DataMatrix and a text element that displays the code's content as
readable text. The layout is designed for labels on A4 sheets, so that alongside the demo version of the software, a
standard printer with A4 paper is sufficient to test the project.
The Data section contains a table with three datasets consisting of typical GS1 information. By right-clicking
on the table header, you can rename, delete or add new columns to the table.
This information is linked to individual layout elements in the Label section through placeholders.
Right-click on the GS1 DataMatrix object on the label and select Edit to open the object's properties window.
Then, navigate to the Text tab.
As shown in the image, the information is listed line by line, with one piece of information per line. Each line starts with an Application Identifier (AI) in parentheses, followed by a placeholder linking to a column in the table above, where the information is stored.
You can insert additional information later in the same way, using the Insert data field button to place the appropriate placeholders.
The GS1 Application Identifier concept and FNC1 as a separator
As explained in the previous section, each piece of information in a GS1 DataMatrix is preceded by a numeric code called the Application Identifier (AI). The AI defines the meaning and format of the information. A table with all supported AIs is provided in the appendix.
Depending on the AI, the length of the information can either be fixed or variable. While AI 01 and AI 17 in our example always have a fixed length (14 and 6 characters, respectively), AI 10 and AI 30 may consist of a variable number of characters. For such AIs, the end of the information must be marked with an FNC1 character so that a barcode scanner can correctly identify where the information ends.
Note: The FNC1 character therefore serves a dual purpose: As mentioned earlier, it marks a DataMatrix code as a GS1 DataMatrix and also acts as a delimiter to separate individual pieces of information within the code.
Our label software inserts the FNC1 character automatically, so you don't need to insert it manually. However, it can still be useful to understand the role of the FNC1 character: Always place variable-length AIs at the end of your data sequence, as shown with AI 30 in the example. This eliminates the need for the FNC1 character, reducing the number of characters to encode in your GS1 DataMatrix.
Note: You can insert the FNC1 character manually by using the Insert special char button. This is, however, only necessary when you enter the information consecutively in a single line, instead of arranging it one below the other as shown in the illustration above.
Summary: Enter each AI-data-pair on a separate line. The software automatically inserts the FNC1 character after variable-length AIs. Place one of these AIs at the end of the sequence to save one FNC1.
GTIN and SSCC – Check Digit Verification and Calculation by the Software
SSCC (AI 00) and GTIN (AI 01 + 02) are among the most common types of information encoded in a GS1 DataMatrix. Both are numeric values that include a check digit in the final position – position 14 for the GTIN and position 18 for the SSCC. The check digit is automatically verified for correctness by our label software.
If your GTINs or SSCCs don't include a pre-calculated check digit, you can have the software calculate and add it automatically. Simply place the cursor at the end of the appropriate line, use the Insert function field button and select [-Mod10-]. This can be applied to both the GS1 DataMatrix code and the textual representation of its contents. For our example, the result should look as follows:

Adjusting the Module Size of GS1 DataMatrix Codes in the Software
Compared to other two-dimensional codes, GS1 DataMatrix stands out for its significantly higher information density, meaning it takes up less space for storing data. This is clearly visible when comparing it to a GS1 QR Code, which encodes the same information even when using the lowest possible error correction level (7%):

This feature, along with the ability to choose between square and rectangular shapes (more on this later), makes GS1 DataMatrix particularly flexible for use in highly confined areas. Despite this compactness, the limited space available, for example on packaging, may sometimes require choosing the smallest possible size for the code. In such cases, however, certain limitations must be taken into account.
In regulated industries, such as healthcare, there are specific rules regarding the so-called module size. Modules are the small square elements that make up the code. Therefore, the overall size of the code directly depends on the size of the individual module. It also depends on the amount of information to be encoded – the more data, the more modules are required.
In addition to regulatory standards, scanner capabilities can also be the limiting factor. In this context, the minimum module size may be subject to agreements between supply chain partners, based on the capabilities of the scanning equipment in use.
By default, our label software prints the GS1 DataMatrix code in the size in which it was created by the user on the
label, with the module size being automatically derived from the code's overall size. However, you can set the module
size manually if needed, which prompts the software to calculate the overall size based on this value:
Manually Setting the Size and Shape of the GS1 DataMatrix Code in the Software
As mentioned in the previous section, the small squares that make up a GS1 DataMatrix code are called "modules". There are 30 different code sizes defined for DataMatrix, which vary in the number of modules and therefore the data capacity. The smallest size consists of 10×10 modules, while the largest contains 144×144 modules.
Of these 30 sizes, 24 are square and 6 are rectangular. The latter are designed for applications where the available space is distributed over a long, narrow or rounded surface. For comparison, below are a square (16×16) and a rectangular (32×8) variant with identical data capacity:

By default, our label software selects the variant with the minimum number of modules needed to display the content, without any preference for the shape. Although this works best in most cases, there are specific situations where it makes sense to manually define the shape or size of the GS1 DataMatrix code, such as:
- space constraints on the surface, as mentioned above;
- industry-specific standards or regulations;
- agreements between supply chain participants;
- when scanning equipment requires a minimum size;
- for visual consistency across different products.
As shown in the illustration in the previous section, both shape and size can be configured manually in the software. However, you can only set one of these parameters at a time. Consider these important points:
- If the manually selected size is too small for the data to be encoded, an error message appears in the label preview instead of the GS1 DataMatrix, allowing early detection of the problem.
- If the chosen variant is larger than necessary, the data will still be encoded correctly, but the unused modules in the code will be filled with redundant data. While this may increase error tolerance in some cases, it could in other cases unnecessarily enlarge the code or decrease the module size.