GS1-128 Barcode – Label Printing Software and Guide
Printing Labels with GS1-128 Barcodes – Software Guide

Follow this step-by-step guide to learn how to create GS1-128 barcodes using our software Barcode Forge and print them on labels or other media.
GS1-128, formerly known as EAN-128 or UCC-128, is the most complex type of 1D barcode. It enables the encoding of extensive information in a single barcode. GS1-128 is used worldwide to manage and track goods throughout the entire supply chain – from production to delivery.
Structure of GS1-128
A GS1-128 barcode can encode one or more pieces of information within the same barcode. Each piece of information is preceded by an Application Identifier (AI). The Application Identifier is a numeric value that specifies the meaning and format of the encoded information. Example:

According to the table in the appendix, the GS1-128 barcode shown here encodes a 14-digit GTIN (AI 01) followed by a 6-digit expiration date (AI 15) in the YYMMDD format. In the human-readable line of the barcode, Application Identifiers are enclosed in parentheses. However, these parentheses are not part of the encoded barcode.
As the table shows, there are around 150 such Application Identifiers used for various types of data. Each AI has a specific format that defines the length and the characters allowed for use within the information.
GS1-128 on the Outside, Code 128 at the Core

Technically, GS1-128 is not a standalone barcode type that translates information into the characteristic pattern of bars. Instead, it is a standard for the structured storage of information that uses the barcode type "Code 128" as its data carrier. This standard enables the identification and traceability of products in global supply chains and is managed by the internationally operating GS1 organization.
As a result, barcode scanners recognize any GS1-128 barcode as Code 128. Therefore, to identify itself as GS1-128 and ensure proper data processing, the barcode always starts with the FNC1 function character. This character is automatically added by our label software, so you don't need to add it manually.
The FNC1 character also serves another important role within GS1-128, which is explained in detail in a later section.
Data Integrity within GS1-128 through Additional Validation by the Software
The GS1-128 standard includes built-in mechanisms to detect errors during data entry and barcode scanning. To ensure maximum data integrity, our label software performs additional validation of each piece of information within the GS1-128 barcode. For example, date values, such as production and expiry date, are checked for validity, while GTIN and SSCC numbers are verified using their check digits. Other data is validated according to its specific format (see appendix table).
If an error is detected, the software displays a detailed error message in the label preview instead of generating the barcode. This allows you to correct any issues before printing.
Creating and Printing GS1-128 Labels using the Software
An example project [download link] and the following instructions demonstrate how to print GS1-128 labels in series. The project generates three different GS1-128 barcodes and can be used with the 30-day trial version of the software. The printout is on A4-sized paper, so a standard A4 printer is sufficient for printing.
Accordingly, the Data section contains three datasets with typical GS1 data. You can rename, delete or add new
columns by right-clicking the table header.
The data in the table is linked to a GS1-128 barcode object located in the Label section. To see how this
linking works, right-click the object, select Edit and navigate to the Barcode tab.
The illustration shows how placeholders represent individual pieces of information. These placeholders correspond to columns in the table shown above.
The placeholder FNC1, highlighted in red, represents the FNC1 character. As mentioned earlier, this character serves a special role. Depending on the Application Identifier (AI), the length of the information can be fixed or variable. While AI 01 and AI 17 in our example always have fixed lengths (14 and 6 characters, respectively), AI 10 and AI 30 consist of a variable number of characters. For such AIs, the end of the information must be marked with an FNC1 character to ensure that a barcode scanner can correctly identify where the information ends. The appendix table shows which AIs have fixed or variable lengths.
Tip: To save space on the label, you should place AIs with variable lengths at the end of your data sequence whenever possible, as shown in our example with AI 30. This eliminates the need for the FNC1 character, reducing the number of characters that the GS1-128 barcode has to encode, which in turn slightly reduces the barcode's required width.
SSCC and GTIN – Check Digit Validation and Calculation by the Software
SSCC (AI 00) and GTIN (AI 01 + 02) are among the most commonly used data elements in GS1-128 barcodes. Both are numeric values with a check digit in the last position. The check digit is automatically verified for correctness by our label software.
If the check digit is missing, however, you can use a # symbol in its place. This instructs the software to calculate the check digit automatically and insert it in place of the # symbol. For example, if your table consists of 13-digit GTINs without a check digit instead of the standard 14-digit format, enter the link in the Edit dialog as follows:
(01)[~GTIN~]#
... or when the number is entered directly:
(01)0318255905295#
For display in a text object, use the placeholder [-Mod10-] instead of the # symbol. To do this, open the
properties of the text object and place the cursor at the appropriate position. Click on Insert function field
and select [-Mod10-]. The result should then look as follows:
(01)[~GTIN~][-Mod10-] or (01)0318255905295[-Mod10-]
Appendix: Explanations for the Following Table
1. In the Format column, an "N" indicates that only numeric data is allowed, while "X" indicates alphanumeric data (plus additional characters). A double point (..) indicates that the number of characters can vary within a specified range. For example, "N..6" indicates a numeric value with a maximum length of 6 digits. Conversely, "N6" indicates a numeric value that must be exactly 6 digits in length.
2. Application Identifiers (column AI) ending with an "x" are used to represent decimal values. The value itself is encoded without a decimal point. Instead, the number of decimal places is inserted into the application identifier at the position of the "x".
For example, 310x (Net weight, kilograms):(3100)123456 = 123456 kg
(3101)123456 = 12345.6 kg
(3102)123456 = 1234.56 kg
(3103)123456 = 123.456 kg
(3104)123456 = 12.3456 kg
(3105)123456 = 1.23456 kg
Application Identifiers for the GS1-128
AI | Description | Format | FNC1 required |
---|---|---|---|
00 | Serial Shipping Container Code (SSCC) | N18 | |
01 | Global Trade Item Number (GTIN) | N14 | |
02 | GTIN of contained trade items | N14 | |
10 | Batch or lot number | X..20 | ✔ |
11 | Production date (YYMMDD) | N6 | |
12 | Due date (YYMMDD) | N6 | |
13 | Packaging date (YYMMDD) | N6 | |
15 | Best before date (YYMMDD) | N6 | |
16 | Sell by date (YYMMDD) | N6 | |
17 | Expiration date (YYMMDD) | N6 | |
20 | Internal product variant | N2 | |
21 | Serial number | X..20 | ✔ |
22 | Consumer product variant | X..20 | ✔ |
235 | Third Party Controlled, Serialised Extension of GTIN (TPX) | X..28 | ✔ |
240 | Additional product identification assigned by the manufacturer | X..30 | ✔ |
241 | Customer part number | X..30 | ✔ |
242 | Made-to-Order variation number | N..6 | ✔ |
243 | Packaging component number | X..20 | ✔ |
250 | Secondary serial number | X..30 | ✔ |
251 | Reference to source entity | X..30 | ✔ |
253 | Global Document Type Identifier (GDTI) | N13+X..17 | ✔ |
254 | GLN extension component | X..20 | ✔ |
255 | Global Coupon Number (GCN) | N13+N..12 | ✔ |
30 | Variable count of items (variable measure trade item) | N..8 | ✔ |
310x | Net weight, kilograms (variable measure trade item) | N6 | |
311x | Length or first dimension, metres (variable measure trade item) | N6 | |
312x | Width, diameter, or second dimension, metres (variable measure trade item) | N6 | |
313x | Depth, thickness, height, or third dimension, metres (variable measure trade item) | N6 | |
314x | Area, square metres (variable measure trade item) | N6 | |
315x | Net volume, litres (variable measure trade item) | N6 | |
316x | Net volume, cubic metres (variable measure trade item) | N6 | |
320x | Net weight, pounds (variable measure trade item) | N6 | |
321x | Length or first dimension, inches (variable measure trade item) | N6 | |
322x | Length or first dimension, feet (variable measure trade item) | N6 | |
323x | Length or first dimension, yards (variable measure trade item) | N6 | |
324x | Width, diameter, or second dimension, inches (variable measure trade item) | N6 | |
325x | Width, diameter, or second dimension, feet (variable measure trade item) | N6 | |
326x | Width, diameter, or second dimension, yards (variable measure trade item) | N6 | |
327x | Depth, thickness, height, or third dimension, inches (variable measure trade item) | N6 | |
328x | Depth, thickness, height, or third dimension, feet (variable measure trade item) | N6 | |
329x | Depth, thickness, height, or third dimension, yards (variable measure trade item) | N6 | |
330x | Logistic weight, kilograms | N6 | |
331x | Length or first dimension, metres | N6 | |
332x | Width, diameter, or second dimension, metres | N6 | |
333x | Depth, thickness, height, or third dimension, metres | N6 | |
334x | Area, square metres | N6 | |
335x | Logistic volume, litres | N6 | |
336x | Logistic volume, cubic metres | N6 | |
337x | Kilograms per square metre | N6 | |
340x | Logistic weight, pounds | N6 | |
341x | Length or first dimension, inches | N6 | |
342x | Length or first dimension, feet | N6 | |
343x | Length or first dimension, yards | N6 | |
344x | Width, diameter, or second dimension, inches | N6 | |
345x | Width, diameter, or second dimension, feet | N6 | |
346x | Width, diameter, or second dimension, yard | N6 | |
347x | Depth, thickness, height, or third dimension, inches | N6 | |
348x | Depth, thickness, height, or third dimension, feet | N6 | |
349x | Depth, thickness, height, or third dimension, yards | N6 | |
350x | Area, square inches (variable measure trade item) | N6 | |
351x | Area, square feet (variable measure trade item) | N6 | |
352x | Area, square yards (variable measure trade item) | N6 | |
353x | Area, square inches | N6 | |
354x | Area, square feet | N6 | |
355x | Area, square yards | N6 | |
356x | Net weight, troy ounces (variable measure trade item) | N6 | |
357x | Net weight (or volume), ounces (variable measure trade item) | N6 | |
360x | Net volume, quarts (variable measure trade item) | N6 | |
361x | Net volume, gallons U.S. (variable measure trade item) | N6 | |
362x | Logistic volume, quarts | N6 | |
363x | Logistic volume, gallons U.S. | N6 | |
364x | Net volume, cubic inches (variable measure trade item) | N6 | |
365x | Net volume, cubic feet (variable measure trade item) | N6 | |
366x | Net volume, cubic yards (variable measure trade item) | N6 | |
367x | Logistic volume, cubic inches | N6 | |
368x | Logistic volume, cubic feet | N6 | |
369x | Logistic volume, cubic yards | N6 | |
37 | Count of trade items or trade item pieces contained in a logistic unit | N..8 | ✔ |
390x | Applicable amount payable or Coupon value, local currency | N..15 | ✔ |
391x | Applicable amount payable with ISO currency code | N3+N..15 | ✔ |
392x | Applicable amount payable, single monetary area (variable measure trade item) | N..15 | ✔ |
393x | Applicable amount payable with ISO currency code (variable measure trade item) | N3+N..15 | ✔ |
394x | Percentage discount of a coupon | N4 | |
400 | Customers purchase order number | X..30 | ✔ |
401 | Global Identification Number for Consignment (GINC) | X..30 | ✔ |
402 | Global Shipment Identification Number (GSIN) | N17 | |
403 | Routing code | X..30 | ✔ |
410 | Ship to - Deliver to Global Location Number | N13 | |
411 | Bill to - Invoice to Global Location Number | N13 | |
412 | Purchased from Global Location Number | N13 | |
413 | Ship for - Deliver for - Forward to Global Location Number | N13 | |
414 | Identification of a physical location - Global Location Number | N13 | |
415 | Global Location Number of the invoicing party | N13 | |
416 | GLN of the production or service location | N13 | |
417 | Party GLN | N13 | |
420 | Ship to - Deliver to postal code within a single postal authority | X..20 | ✔ |
421 | Ship to - Deliver to postal code with ISO country code | N3+X..9 | ✔ |
422 | Country of origin of a trade item | N3 | |
423 | Country of initial processing | N3+N..12 | ✔ |
424 | Country of processing | N3 | |
425 | Country of disassembly | N3+N..12 | ✔ |
426 | Country covering full process chain | N3 | |
427 | Country subdivision Of origin | X..3 | ✔ |
7001 | NATO Stock Number (NSN) | N13 | |
7002 | UN/ECE meat carcasses and cuts classification | X..30 | ✔ |
7003 | Expiration date and time | N10 | |
7004 | Active potency | N..4 | ✔ |
7005 | Catch area | X..12 | ✔ |
7006 | First freeze date (YYMMDD) | N6 | |
7007 | Harvest date | N6..12 | ✔ |
7008 | Species for fishery purposes | X..3 | ✔ |
7009 | Fishing gear type | X..10 | ✔ |
7010 | Production method | X..2 | ✔ |
7020 | Refurbishment lot ID | X..20 | ✔ |
7021 | Functional status | X..20 | ✔ |
7022 | Revision status | X..20 | ✔ |
7023 | Global Individual Asset Identifier (GIAI) of an assembly | X..30 | ✔ |
703x | Number of processor with ISO Country Code | N3+X..27 | ✔ |
7040 | GS1 UIC with Extension 1 and Importer index | N1+X3 | |
710 | National Healthcare Reimbursement Number (NHRN) - Germany PZN | X..20 | ✔ |
711 | National Healthcare Reimbursement Number (NHRN) - France CIP | X..20 | ✔ |
712 | National Healthcare Reimbursement Number (NHRN) - Spain CN | X..20 | ✔ |
713 | National Healthcare Reimbursement Number (NHRN) - Brasil DRN | X..20 | ✔ |
714 | National Healthcare Reimbursement Number (NHRN) - Portugal AIM | X..20 | ✔ |
723x | Certification reference | X2+X..28 | ✔ |
7240 | Protocol ID | X..20 | ✔ |
8001 | Roll products (width, length, core diameter, direction, splices) | N14 | |
8002 | Cellular mobile telephone identifier | X..20 | ✔ |
8003 | Global Returnable Asset Identifier (GRAI) | N14+X..16 | ✔ |
8004 | Global Individual Asset Identifier (GIAI) | X..30 | ✔ |
8005 | Price per unit of measure | N6 | |
8006 | Identification of an individual trade item piece | N14+N2+N2 | ✔ |
8007 | International Bank Account Number (IBAN) | X..34 | ✔ |
8008 | Date and time of production | N8+N..4 | ✔ |
8009 | Optically Readable Sensor Indicator | X..50 | ✔ |
8010 | Component/Part Identifier (CPID) | Y..30 | ✔ |
8011 | Component/Part Identifier serial number (CPID SERIAL) | N..12 | ✔ |
8012 | Software version | X..20 | ✔ |
8013 | Global Model Number (GMN) | X..30 | ✔ |
8017 | Global Service Relation Number to identify the relationship between an organisation offering services and the provider of services | N18 | |
8018 | Global Service Relation Number to identify the relationship between an organisation offering services and the recipient of services | N18 | |
8019 | Service Relation Instance Number (SRIN) | N..10 | ✔ |
8020 | Payment slip reference number | X..25 | ✔ |
8026 | Identification of pieces of a trade item (ITIP) contained in a logistic unit | N14+N2+N2 | ✔ |
8110 | Coupon code identification for use in North America | X..70 | ✔ |
8111 | Loyalty points of a coupon | N4 | |
8112 | Paperless coupon code identification for use in North America | X..70 | ✔ |
8200 | Extended Packaging URL | X..70 | ✔ |
90 | Information mutually agreed between trading partners | X..30 | ✔ |
91 | Company internal information | X..90 | ✔ |
92 | Company internal information | X..90 | ✔ |
93 | Company internal information | X..90 | ✔ |
94 | Company internal information | X..90 | ✔ |
95 | Company internal information | X..90 | ✔ |
96 | Company internal information | X..90 | ✔ |
97 | Company internal information | X..90 | ✔ |
98 | Company internal information | X..90 | ✔ |
99 | Company internal information | X..90 | ✔ |
For questions about the GS1-128 or our label software, please contact us!