You need SSCC-18 pallet labels, and your label or reporting software lists Code 128, QR and DataMatrix but no SSCC-18 option. That gap is not a blocker: SSCC-18 is not a symbology. It is a data payload - application identifier (00) plus the 18-digit serial shipping container code - carried in GS1-128, and GS1-128 is Code 128 with one leading FNC1 character. This guide gives you the exact 20-character string to encode, the check-digit arithmetic, the bar sizes GS1 asks for on a logistics label, and a scan-and-grade check before the pallet leaves the dock.
What you are really encoding
A GS1-128 symbol begins with FNC1, the marker that tells a scanner to read the following digits as GS1 application identifiers. AI (00) is fixed length, so the FNC1 appears once, before the AI, and never again in the symbol. After it come 20 characters: the two digits of the AI and the 18-digit SSCC.
Code 128 itself is a start character, data, one check character - a weighted sum taken mod 103 (Code 128 on Wikipedia) - and a stop. Its numeric Set C encodes digit pairs, so your 20 digits become exactly 10 symbol characters. The even count matters: the whole payload sits in Set C with no mid-symbol switch. If you later append variable-length AIs on a different label, each one ends with its own FNC1 separator - the same rule GS1 QR codes follow - and the subset-switch traps are the ones described in why long Code 128 labels fail to read.
Build the 20-character string
- Take your GS1 company prefix and choose an extension digit (0-9) plus a serial reference that together fill 16 digits.
- Write the 17 digits in order: extension digit, prefix, serial reference.
- Compute the check digit with the GS1 mod-10 rule: weight the 17 digits 3, 1, 3, 1 ... from the right, sum the products, then take 10 minus the sum's final digit.
- Assemble the encode string: FNC1, then 00, then the 18 digits including the check digit.
Worked example: prefix 1234567 (7 digits), extension digit 3, serial reference 000123456 (9 digits).
Weighted from the right: 6×3 + 5×1 + 4×3 + 3×1 + 2×3 + 1×1 + 0×3 + 0×1 + 0×3 + 7×1 + 6×3 + 5×1 + 4×3 + 3×1 + 2×3 + 1×1 + 3×3 = 106.
Check digit = 10 − (106 mod 10) = 4. The SSCC is 312345670001234564; the string to encode is FNC1 followed by 00312345670001234564 - 20 characters, 10 digit pairs, no separator needed anywhere.
Encode it in a Code 128 generator
If the tool offers a GS1-128 mode (some label it GS1 or EAN-128), select it and type 00312345670001234564 without brackets; the mode inserts FNC1 and manages the code sets for you. In plain Code 128 mode, prepend the FNC1 escape the tool's manual defines - every generator marks it differently. Never type (00): parentheses and spaces belong only to the human-readable line under the bars. Generators that render a bitmap rather than a print object work the same way; the workflow in generating an EAN-13 bitmap with readable digits transfers directly.
Size the symbol
GS1's logistics label guideline sets the SSCC narrow bar (X) at 0.495 mm minimum and the bar height at 32 mm minimum. Width follows from the character count: Start C, FNC1, 10 digit pairs and the check character are 13 symbol characters at 11 modules each, plus the 13-module stop, so 13 × 11 + 13 = 156 modules.
Line X up with printer dots. At 300 dpi a dot is 25.4 / 300 = 0.0847 mm, so 6 dots give X = 0.508 mm. Bars: 156 × 0.508 = 79.2 mm. Quiet zones at 10X per side add 20 × 0.508 = 10.2 mm, for about 90 mm total. At 203 dpi, 4 dots give X = 0.5005 mm - still over the 0.495 mm floor - and the symbol lands near 88 mm with quiet zones. Keep the full quiet zone clear of edges and overprint; what module width and tilt do to the reading side is covered in Code 128 module size, reading angle and reader distance.
Print it
Choose the Code 128 component in your reporting or label engine and feed it the 20-character string. Set the print job up once - page size, printer, output path; the steps in setting up a print job for label output are the same across engines. If the symbol comes out blank, clipped or the wrong size, the print path usually does not match the driver: why label printing needs a matching print path walks through that failure. The print-quality habits that make any generated barcode readable - bitmap resolution, contrast, human-readable text - are the same ones used in printing a readable Code 39 barcode from your own program. Print the human-readable line as (00) 312345670001234564; spaces there are allowed and never encoded.
Check the printed label before it ships
- Scan with a handheld first - any Code 128 reader returns the same string:
- Resolution
- Up to 3 MP
- Shutter
- Global
- Interface
- USB
- Connection
- Wired
The LS-HCR-0001 is a 1.0 MP handheld reader with USB 2.0. Hold a handheld 100-200 mm off a symbol this size and read three labels in a row.
- Bench-check read rate where the label will actually travel:
- Resolution
- Up to 3 MP
- Shutter
- Global
- Interface
- Fast Ethernet
- Resolution
- Up to 3 MP
- Interface
- GigE
- Resolution
- Up to 3 MP
The LS-CRD-0047 reads at 60-120 mm over USB 2.0 and suits a close-range bench check. The MV-ID3013PM-12M-WBN pairs a 12 mm lens with a 1.3 MP sensor, and the MV-ID813M-05S-WBN-SR adds a 4.9 mm lens and white light illumination; both fit a fixed station where labels pass at a set standoff. If the geometry or line speed calls for something else, filter by mount, interface and resolution in the code reader finder, or browse the fixed code readers and handheld code readers categories.
-
Grade the print. A compliant SSCC label needs an ISO/IEC 15416 grade of at least 1.5/06/660 - grade 1.5 at a 0.15 mm aperture under 660 nm light. A clean scan proves decode, not grade.
-
Read the return string. The reader sends 20 ASCII digits, 00 then the SSCC, with no separator; parse it positionally as shown in splitting barcode strings into fields. For a station that compares the string against the order, follow the barcode match verification build.
Common mistakes
- Typing (00) with parentheses into the encoder: they become encoded characters and the symbol stops matching GS1 structure.
- Trusting a bench scan alone: Code 128's own check character catches broken symbols, but nothing in a plain scan validates the GS1 check digit or the FNC1.
- Quiet zone shorter than 10X: a label edge, fold or overprint inside it gives intermittent no-reads that look like hardware faults.
- Reusing an SSCC on a second pallet: one number, one container, for the life of the record.
Next step
Print one label, scan it, grade it, then release the printer. When the line has to read SSCC labels on its own - dock doors, wrap stations, sorters - walk the station through the system configurator, or send us the label geometry and line speed via the contact page and we will size the optics.
Questions
Is SSCC-18 a symbology my barcode reader must support?
No. SSCC-18 names data content: application identifier (00) plus the 18-digit serial shipping container code. The symbology is GS1-128, which is Code 128 with a leading FNC1. Any reader that decodes Code 128 or GS1-128 handles a pallet label with no SSCC mode, license option or firmware update, which is why a handheld scanner works for spot checks and a fixed reader works on the line.
Why does my scanner return 20 plain digits instead of (00)...?
The brackets and spaces are human-readable interpretation only and are never encoded. The reader strips FNC1 and sends the 20 ASCII digits 00 followed by the SSCC. Because AI (00) is fixed at 18 digits, no separator character appears anywhere in the string, so you can parse it positionally: two digits of AI, then 18 of SSCC.
Can I print the label as plain Code 128 and skip the FNC1?
It will scan, since a Code 128 reader returns the same digits either way. It will not be a compliant GS1-128 symbol, and trading partners whose systems validate the FNC1 and the AI structure can reject the label or raise chargebacks. Use the generator's GS1-128 mode, or plain Code 128 with its FNC1 escape, and grade the result.
How many digits does the serial reference get?
Whatever the prefix leaves. The SSCC is 18 digits: one extension digit, the GS1 company prefix, the serial reference and one check digit. Prefixes run 6 to 12 digits, so serials run 4 to 10; the worked example's 7-digit prefix leaves 9. Never issue one SSCC twice - sequence or date-stamp serials so a pallet can never inherit another's number.



