What GS1-128 Composite is
GS1-128 Composite pairs a linear GS1-128 symbol with a 2D composite component (CC-A, CC-B, or CC-C) stacked directly above it, so a single label carries both a widely-compatible linear scan and extra structured data (batch/lot numbers, expiration dates) in the 2D component. bwip-js splits the input on the first "|" character into a linear half and a composite half, re-runs the combined data through its GS1 Application Identifier linter, then delegates the linear half to its GS1-128 encoder and the composite half to its GS1 Composite Component encoder -- confirmed directly reading the function body to its end. The underlying bwip-js/BWIPP function name has an underscore (gs1_128composite); the public generator name here (gs1-128composite, with a dash) is a real, working alias resolved through bwip-js's own symbology dispatch table.
Generate it now
Enter a value shaped as "<linear GS1 AI data>|<composite-component GS1 AI data>" -- a pipe character separates the two halves -- to see a live preview.
Valid input
A pipe character must separate the two halves (bwipp.missingCompositeComponent rejects a value with none). The combined data on both sides of the pipe is parsed as GS1 Application Identifier syntax: AIs must be wrapped in parentheses (bwipp.GS1aiMissingOpenParen), a checksum-bearing AI (like AI 00's SSCC or AI 01's GTIN) must carry a correct GS1 Mod-10 check digit (bwipp.GS1badChecksum), and some AIs require a companion AI to be present -- for example, AI 10 (batch/lot number) requires one of AI 01, 02, 03, 8006, or 8026 elsewhere in the data (bwipp.GS1missingAIs) -- each confirmed directly with a deliberately malformed test value.
Key options
Supported options include includetext and height (GS1-128's own real options, genuinely reaching the underlying delegate for the linear half because gs1-128composite forwards the caller's live options unchanged). Real, literal default: includetext false.
Output and printing
Export SVG for vector-precise label artwork or PNG for a quick proof.
Common uses
GS1-128 Composite is used for retail and logistics items that need both a widely-scannable linear barcode and extra structured 2D data (batch/lot numbers, use-by dates) on the same label -- common in food traceability and variable-measure trade items.
Example
See the live preview above, seeded with a bwip-js-verified valid value.
Size guidance
The composite component's own version (CC-A, CC-B, or CC-C) changes its rendered height and width independently of the linear half's own length -- a smaller composite version produces a more compact overall label.
Troubleshooting
A rejected value usually means the pipe separator is missing, an AI is not wrapped in parentheses, a checksum-bearing AI's check digit is wrong, or an AI that requires a companion AI (like AI 10) has none present.
Related formats
Related formats: the separately-covered GS1-128 generator (the linear half alone, no composite component) and UPC-A Composite (a UPC-A linear symbol paired with a composite component instead of GS1-128).
FAQ
What goes on each side of the pipe character?
The linear GS1-128 half's own AI data goes before the pipe; the 2D composite component's own AI data goes after it. Both halves are parsed together as one combined GS1 Application Identifier structure.
Why was my AI 10 (batch/lot number) value rejected?
AI 10 requires a companion AI to be present elsewhere in the same combined data -- one of AI 01, 02, 03, 8006, or 8026. A value with only AI 10 and nothing else is rejected.