Learn › Formats

Code 128 vs Code 39: which one should you use?

Both are general-purpose barcodes, not substitutes for UPC-A or EAN-13 at retail checkout. Code 128 is the modern default. Code 39 remains useful when an industry standard or an existing system requires it.

5 min read · updated 25 September 2026

Side by side

Code 128 · SKU-10442
Code 39 · SKU-10442

Same nine characters and the same narrow-bar width. The Code 39 version is noticeably wider because each character takes more space.

Code 128Code 39
CharactersAll 128 ASCII characters, including lowercase43: 0 to 9, A to Z, space, - . $ / + %
Width for the same dataCompact; digit pairs are encoded in one symbol characterOften wider; the difference depends on the data and settings
Check characterBuilt in (modulo 103), added automaticallyOptional (modulo 43)
Print toleranceGoodCan be easier to print at the same narrow-bar width; test scan quality
Typical usesWarehousing, shipping labels, GS1-128, marketplace labels, asset tagsAutomotive, defense, healthcare wristbands, legacy industrial systems
Retail checkoutNo (use EAN-13 or UPC-A)No

Why Code 128 is usually the better default

It encodes all of ASCII. Lowercase letters, punctuation, and control characters are supported through Code 128's code sets, so product codes such as ab-12/x can be encoded without changing the data.

It is compact. Code 128 has three code sets. The generator switches between them automatically, and set C encodes two digits per symbol character. A long numeric value such as a serial number or tracking number comes out much narrower than in Code 39.

It checks itself. A modulo-103 check character is always included, so a scanner rejects most misreads rather than passing on wrong data.

It is the base of GS1-128. GS1-128 uses Code 128 with an FNC1 character after the start character and structured data marked by Application Identifiers. If you might later need GS1-128, check that your scanners and software can process GS1-128 data. Barcode Pro produces plain Code 128; it does not add GS1-128 Application Identifiers.

When Code 39 is the right choice

Practical tips for both

And when to use neither

Frequently asked questions

Is Code 128 better than Code 39?

For most new projects, yes. Code 128 encodes all 128 ASCII characters, including lowercase letters, and usually produces a shorter barcode for the same data. Choose Code 39 when a customer, industry standard or existing scanner setup requires it.

Can Code 39 encode lowercase letters?

Standard Code 39 cannot. It supports digits, uppercase letters, space and the symbols - . $ / + %. Extended Code 39 can represent full ASCII using character pairs for some values, but your generator must encode them and your scanner must be configured to decode them.

Can I use Code 128 for products sold in stores?

Not as a replacement for EAN-13 or UPC-A at the checkout. Most retail checkout systems use a GTIN encoded in an EAN or UPC symbol. Code 128 is used in logistics through its GS1-128 variant, and for in-store labels that only your own system reads.

Why does my Code 39 barcode show asterisks?

Code 39 uses an asterisk as the start and stop character. Some generators show them in the human-readable text; others hide them. They are part of the symbol either way; check whether your generator adds them automatically before entering asterisks.

Keep reading