Code 128 vs Code 39: Which Barcode Should You Use?

If you’re generating barcodes for inventory or internal tracking, you’ll run into a choice between Code 128 and Code 39 — two of the most common 1D barcode formats outside of retail UPC/EAN. They look similar but aren’t built the same.

The Core Differences

  • Code 39: Encodes uppercase letters, numbers, and a few symbols. Simpler structure, but less data-dense — it needs more physical space to encode the same amount of information.
  • Code 128: Encodes the full ASCII character set (including lowercase letters), and is significantly more compact for the same data, since it uses a more efficient encoding scheme.

Want to learn more? Explore our related QR code and barcode guides for more helpful tips, how-to guides, and useful information.

Which One Should You Use?

  • Use Code 128 for most modern inventory, shipping, and logistics purposes. It’s more space-efficient, supports more character types, and is the current industry standard for internal tracking codes (including the GS1-128 variant used in shipping labels).
  • Use Code 39 mainly for legacy systems that specifically require it, or in industries with older scanning hardware that only supports Code 39. It’s still used in some automotive and defense supply chains due to historical standardization.

Practical Differences That Matter

  • Label size: Code 128 fits more data into less space, which matters if you’re labeling small items where barcode real estate is limited.
  • Character support: If your internal codes use lowercase letters or a wider range of symbols, Code 39 simply can’t encode them — you’d need Code 128.
  • Scanner compatibility: Nearly all modern scanners (including phone camera-based ones) read both formats without issue, so compatibility isn’t usually the deciding factor anymore.
  • Self-checking: Code 39 includes a simpler self-checking structure, historically valued for reliability with older hardware, but modern error correction in Code 128 has closed this gap.

Common Mistakes

  • Choosing Code 39 out of habit or unfamiliarity with alternatives, when Code 128 would produce smaller, cleaner labels for the same data.
  • Mixing formats inconsistently across a product line, which complicates scanning workflows and staff training.

Real Use Case

A warehouse switching from an old barcode system built on Code 39 (because that’s what their original scanner supported 15 years ago) moves to Code 128 when upgrading hardware, immediately shrinking their label sizes and freeing up space for other required label info like lot numbers and dates.

Wrapping Up

For most new inventory or internal tracking setups, Code 128 is the better default — more compact and flexible. Code 39 still has a place in specific legacy environments. Our Bulk Barcode Generator supports both formats, so you can match whatever your existing system or hardware requires.

FAQ’s

For most modern use cases, yes — it’s more space-efficient and supports more characters. Code 39 remains relevant mainly for legacy systems.

Nearly all modern scanners, including smartphone camera-based ones, support both formats without extra configuration.

Code 128, unless you’re integrating with older hardware or a system specifically built around Code 39.

Similar Posts