Skip to content
DockLabel

GS1-128 SSCC label: how the barcode is built and what size to print it

GS1-128 is the barcode a GS1 logistic label carries on a pallet or carton: a Code 128 symbol with a special first character that tells the scanner the data follows GS1 rules. This page explains the structure, the separators, and the sizes GS1 specifies for shipping units.

What makes a Code 128 barcode a GS1-128

One thing: the character straight after the start character is Function 1, written FNC1. The GS1 General Specifications put it plainly in section 5.4.3.7: a Code 128 symbol that begins with a start character followed by FNC1 is always a GS1-128 barcode, and one that does not is never a GS1-128 barcode. A scanner uses that character to decide whether to read the data as GS1 application identifiers.

The FNC1 in that first position is not sent to your system as a character. The scanner reports it through the symbology identifier ]C1 in front of the data (section 5.4.7.4).

Application identifiers

The data inside is a chain of element strings. Each one is an application identifier (AI), two to four digits that say what the value is, followed by the value. (00) is an SSCC, (01) a GTIN, (10) a batch or lot. The parentheses appear only in the printed text under the bars. They are not encoded. The application identifier table lists the ones used on shipping labels with their formats.

Inside an SSCC barcode

Here is the symbol for (00) 006141410000000012, character by character, as this site's encoder builds it. Code set C packs two digits into each character, which is why 20 digits take only ten data characters.

PositionCharacterCarriesValue
1Start C105
2FNC1102
3Data (set C)000
4Data (set C)000
5Data (set C)6161
6Data (set C)4141
7Data (set C)4141
8Data (set C)000
9Data (set C)000
10Data (set C)000
11Data (set C)000
12Data (set C)1212
13Symbol check character4
14Stop106

The symbol check character is a second, separate check from the SSCC's own check digit. It is the weighted sum of the character values, modulo 103 (section 5.4.7.5.1). It is never printed in the text under the bars.

Separators between element strings

When one barcode carries several element strings, the scanner has to know where each ends. GS1 handles this with a short fixed list. Element strings whose AI starts with one of the two-digit pairs in table 7-6 of the General Specifications have a predefined length and need nothing after them. Every other element string must be followed by a separator, FNC1, unless it is the last one in the barcode (sections 7.8.3 to 7.8.6).

The catch is that "fixed length" and "predefined length" are not the same thing. GS1 states that AIs outside the table are treated as variable length even when their data field has a fixed size. The count AI (37), the PO number (400) and the postal code (420) all need a separator when something follows them. The separator never appears in the printed text.

Limits

  • At most 48 data characters, counting the AIs and any separators (section 5.4.4.3).
  • At most 165.10 mm (6.5 inches) long, quiet zones included (section 5.4.4.3).
  • A quiet zone of at least ten modules on each side (section 5.4.4.2).
  • The symbol is 11 modules per character plus 46, where the count covers data, FNC1 separators and code set switches (section 5.4.7.2).

Print size for pallets and cartons

For logistic units scanned in general distribution, table 5-51 of the General Specifications (section 5.12.3.5) sets the width of one module, the X-dimension, at 0.495 mm minimum and 0.940 mm maximum, with bars at least 31.75 mm (1.25 inch) tall.

A thermal printer can only draw whole dots, so the module width is a whole number of dots, set in ZPL with ^BY. This site uses the smallest value that lands inside the GS1 range at each resolution:

PrinterDots per moduleX-dimensionSSCC barcode with quiet zones
203 dpi40.500 mm88.1 mm
300 dpi60.508 mm89.4 mm

The arithmetic is dots times 25.4 divided by the dpi. Both widths fit across a 4 inch (101.6 mm) label. This is also why ZPL written for a 203 dpi printer cannot simply be sent to a 300 dpi one: the same dot counts print about two thirds the size, and the bars fall below the GS1 minimum.

The text under the bars

GS1 requires a human readable interpretation of each element string in a GS1-128 on a logistic label (section 6.6.4.1.2), with parentheses around the AIs and no separator characters shown (section 4.14). Zebra's ZPL guide for the ^BC command notes that to get the parentheses you turn the printer's own interpretation line off and write a separate text field, which is what the generator does. The annotated ZPL example shows it.

Older documents and many retailer manuals call this same barcode UCC-128. See UCC-128 barcode for the names, and the SSCC label guide for the label built around it.

Make this label now: fill in the shipment, preview it, and copy or download the ZPL.

Open the label generator

Sources