Skip to main content
A GS1 Composite barcode is two barcodes printed as one: a linear barcode that identifies the item, and a small 2D barcode above it that carries extra data, such as a batch number or expiry date. A scanner that only reads linear barcodes still gets the item number.

Decode one

Scan or paste a barcode and see every part of it.

Make one

Generate a valid barcode from fields.

Where you’ll see it

  • Fresh food and healthcare items that need a batch or expiry date alongside the GTIN.
  • Less often on new labels. As 2D barcodes like GS1 DataMatrix and QR Code are accepted at retail, they’re increasingly used for the same data instead. See Sunrise 2027.

Anatomy

The linear component

The linear component is one of: It’s a complete barcode on its own, and it includes a flag that tells a scanner a composite component is there to read too.

The composite component

There are three versions, which hold different amounts of data: An encoder picks the smallest one that fits. CC-A and CC-B are based on MicroPDF417, and CC-C on PDF417.

Check digits

Each component has its own error checking, which the scanner verifies. The GTIN in the linear component also keeps its GS1 mod-10 check digit. See Check digits.
  • GS1 DataBar: the most common linear component, and Expanded can carry similar data on its own.
  • GS1 DataMatrix: carries the GTIN and the extra data in a single 2D barcode.

Gotchas

  • Only half the data. A scanner that can’t read 2D barcodes, or has composite reading turned off, returns just the linear component. If your app needs the batch or expiry, check that it arrived.
  • One scan, two barcodes. Scanners that read both parts join them into one string of GS1 data. Parse it as GS1 data, not by position.

Scanning it in your app

GS1 Composite is in the GS1 group.
See GS1 Application Identifiers for reading the fields out of a scan.

Specification