What you're using right now
- 100+ barcode & QR symbologies
- Live preview & customization
- PNG & SVG export, no login
- Copy to clipboard
Loading Barcode Mint…
Free Online Barcode & QR Code Generator
Code 128 subset C squeezes two digits into every symbol character, making it the most compact way to barcode a long numeric-only string.
Open the generator ↓Turn a CSV — or a numbered sequence — into hundreds of barcodes at once, exported as a ZIP of images or a print-ready PDF sheet. Launching with Pro.
The browser generator stays free forever. Paid plans are for teams who need bulk output and developers who need the REST API at scale — commercial license included. Tell us what you'd use; early-list members get first access and launch pricing.
What you're using right now
For designers & teams
Priced by requests. Commercial license and self-serve keys included; usage dashboard at launch.
Code 128 C is the character-set-C variant of Code 128, and it works differently from subsets A and B: instead of mapping one character to one symbol, it maps a pair of digits (00 through 99) to a single symbol character. That means a 12-digit string that would take 12 symbol characters in subset B takes only 6 in subset C — roughly halving the physical length of the barcode for the same data. The tradeoff is strict: subset C can only encode digit pairs, so it cannot represent letters, symbols, or an odd-length numeric string without padding.
This makes Code 128 C the go-to choice specifically for long, purely numeric identifiers — order numbers, GTINs, tracking numbers — where minimizing barcode width matters more than encoding mixed content.
Where subsets A and B each dedicate one symbol character to one input character, subset C consumes input two digits at a time. The digit pair "00" through "99" each has a unique symbol value, giving 100 possible pairs mapped into the same 11-module bar/space pattern used throughout Code 128. Because of this pairing requirement:
This digit-pair mechanism is exactly what underlies GS1-128 application identifiers for things like weight, quantity, and date fields, where compactness on a shipping label is critical and the data is guaranteed numeric.
Subset C shows up wherever a long numeric ID needs to fit in minimal label space:
Code 128 C falls under the same ISO/IEC 15417 standard as subsets A and B, but its 106 symbol values map to digit pairs "00" through "99" rather than individual characters. Each symbol still occupies 11 modules across 3 bars and 3 spaces, identical to the other subsets, which is exactly why subset C achieves double the numeric density — the same physical footprint per character now represents two digits instead of one. Data length must be even, since digits are consumed two at a time; Barcode Mint will flag or pad odd-length numeric input as needed. As with all Code 128 variants, a mandatory modulo-103 check digit is calculated over the encoded values and appended automatically.
Choose Code 128 C from the symbology list in Barcode Mint when you know your data is purely numeric with an even digit count. Enter the digits into the data field — if the count is odd, pad with a leading zero first, since subset C can't encode a lone unpaired digit. The live preview will show the compact result immediately. From there:
For sequential numeric IDs, use the batch/sequence tool to generate an incrementing series automatically. For larger numeric datasets, the bulk CSV → ZIP/PDF uploader turns a spreadsheet column into a full set of barcodes in one pass — just make sure every value has an even digit count first. Developers can call the REST API directly with /barcode?type=code128c&data=YOURDATA to automate generation from numeric datasets.
Because subset C barcodes are narrower for the same data length, a few things matter more here than with A or B:
Against Code 128 A and B, subset C is roughly twice as dense for numeric data but can't encode a single letter or symbol — the moment your data isn't purely even-length digits, you need to switch. Against Interleaved 2 of 5 (ITF), another digit-pair symbology, Code 128 C carries a mandatory check digit that ITF's base form lacks, making it the more error-resistant choice for numeric IDs where misreads are costly. Against ITF-14 specifically, Code 128 C is flexible-length and general-purpose, while ITF-14 is a fixed 14-digit GS1 standard purpose-built for shipping cases — use ITF-14 when GS1 case-coding compliance is required, and Code 128 C for other long numeric identifiers.
Subset C requires an even digit count since it encodes two digits per symbol. Pad an odd-length string with a leading zero, or let auto Code 128 handle the mixed encoding for you.
No, though both are compact numeric symbologies. ITF-14 is a distinct barcode standard fixed at 14 digits for shipping cartons, while Code 128 C is a flexible-length subset of Code 128 usable for any even-length numeric string.
Yes — upload a CSV of even-length numeric values to Barcode Mint's bulk tool to generate a ZIP of barcode images or a single print-ready PDF.