Code 128 vs Code 39

Both encode letters and numbers, and both are free for anyone to use. Code 128 is newer, smaller and more flexible; Code 39 is simpler and still required by some systems.

By the BarcodePilot team · Updated

A handheld computer scanning parcel barcodes
A handheld computer scanning parcel barcodes.

Side by side

Code 128Code 39
CharactersAll 128 ASCII (A–Z, a–z, 0–9, symbols)43: A–Z, 0–9, space, - . $ / + %
Width for ASSET-00417 at 0.33 mm (bars only)About 48 mmAbout 69 mm
Digits-only dataPacks two digits per character (set C)One per character
Check characterAlways includedOptional (mod 43)
Introduced19811974
Typical usersShipping, retail back-office, Amazon FBA, healthcareDefence (LOGMARS), automotive (AIAG), asset tags, badges

Why Code 128 is usually better

  • Smaller. The same value takes roughly a third less space, and long numbers less than half.
  • More characters. Lower-case letters and all keyboard symbols.
  • Safer. The built-in check character means misreads are extremely rare.
Container cranes at the Port of Southampton
Container cranes at the Port of Southampton.

When Code 39 is the right choice

  • Your customer, contract or industry standard specifies it, such as US Department of Defense MIL-STD-129 labels or AIAG automotive labels.
  • An older scanner or software only reads Code 39.
  • You print with a barcode font in Word or Excel. Code 39 fonts work by typing *VALUE*, while Code 128 fonts need a formula to calculate the check character.

Bottom line

For anything new, use Code 128. Use Code 39 when something you have to work with demands it. Both are free to make here.

Pallet racking in a distribution warehouse
Pallet racking in a distribution warehouse.

Questions

  • Almost every modern scanner reads both out of the box.

  • Generally yes, because every Code 128 has a check character. Code 39 is self-checking, which helps, but has no check digit unless you add one.

  • Code 128 fits more on a small tag. Use Code 39 if your asset software expects it.