Side by side
| Code 128 | Code 39 | |
|---|---|---|
| Characters | All 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 mm | About 69 mm |
| Digits-only data | Packs two digits per character (set C) | One per character |
| Check character | Always included | Optional (mod 43) |
| Introduced | 1981 | 1974 |
| Typical users | Shipping, retail back-office, Amazon FBA, healthcare | Defence (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.

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.

