Barcode comparison
Code 128 vs Code 39: Which Barcode Should You Use?
Code 128 and Code 39 are both linear barcodes commonly used for internal identifiers, but they are not interchangeable in every workflow. The best choice depends on the characters you need, available label space and any scanner or industry specification you must follow.
Updated September 13, 2026
For a new general inventory, SKU or asset-label workflow, Code 128 is usually the stronger starting point because it is more data-dense and supports a broader character set. Use Code 39 when an existing scanner, customer specification or industry workflow explicitly requires Code 39. If another system defines the symbology, follow that requirement instead of choosing by appearance.
Code 128 vs Code 39 at a glance
Both formats are standardized 1D barcode symbologies. ISO publishes Code 128 as ISO/IEC 15417 and Code 39 as ISO/IEC 16388. BarcodeBatch treats them as separate formats because their data rules and practical label behavior differ.
| Question | Code 128 | Code 39 |
|---|---|---|
| Best general starting point for a new internal system? | Usually yes | Usually only when required or already established |
| Lowercase and broad ASCII-style data? | Better fit | Standard Code 39 is more limited |
| Compact labels for the same payload? | Usually more efficient | Usually wider |
| Legacy or explicit Code 39 requirement? | Do not substitute automatically | Use when the specification requires it |
| Retail GTIN at checkout? | Not a replacement for the required retail carrier | Not a replacement for the required retail carrier |
Why Code 128 is usually the better default for new internal labels
Code 128 was designed to encode a broad range of characters efficiently. Its code sets let an encoder choose an efficient representation for the supplied data, which is especially useful when labels contain mixed letters and numbers or longer identifiers.
That makes Code 128 a practical choice for internal SKUs, serial numbers, asset IDs and warehouse identifiers when no outside party mandates a different symbology.
When Code 39 is still the right choice
Code 39 remains a current ISO-standardized symbology. Existing equipment, contracts and industry-specific labeling rules can make compatibility more important than density.
If a receiving warehouse, scanner configuration or customer label specification says Code 39, use Code 39. Do not silently switch to Code 128 simply because the resulting image is narrower.
Do not confuse Code 128 with GS1-128
Generic Code 128 and GS1-128 share the underlying Code 128 symbology, but GS1-128 adds GS1-specific data rules such as FNC1 and Application Identifiers. A logistics specification that asks for GS1-128 is not asking for an arbitrary Code 128 symbol.
BarcodeBatch currently provides generic Code 128 generation. Confirm the required carrier with the receiving system before printing production labels.
A practical decision rule
Start with the system that will scan the label. If it mandates Code 39, use Code 39. If you control a new internal workflow and need flexible alphanumeric data in limited label space, start by testing Code 128. If the label is for retail product identification, first determine the assigned GTIN and the retail barcode carrier required for that environment.
- Confirm the required symbology before designing the label.
- Test the longest real value, not only a short sample.
- Scan printed output with the actual scanner or application.
- Keep the source identifier unchanged; changing symbology should not rewrite your data.
Common questions
Frequently asked questions
Is Code 128 better than Code 39?
For many new internal barcode systems, Code 128 is a better starting point because it is flexible and typically more compact. Code 39 is still the correct choice when an established workflow or specification requires it.
Can Code 39 and Code 128 encode the same SKU?
Often yes for values that fit both formats, but the resulting symbols are different. The scanner and receiving application must support the symbology you choose.
Is Code 128 the same as GS1-128?
No. GS1-128 uses the Code 128 symbology with GS1-specific structure, including FNC1 and Application Identifiers. Generic Code 128 should not be substituted when GS1-128 is explicitly required.
Should I use Code 128 or Code 39 for retail UPC or EAN data?
Use the retail carrier required for the assigned GTIN and scanning environment. Code 128 or Code 39 should not be chosen merely because they can display a string of digits.
Sources & standards
Technical claims in this guide are checked against primary or official documentation where available.