Code 128 vs Code 39: Which One Should You Use?
Published 9 October 2026
If you need a barcode that holds letters as well as numbers, you'll meet two names again and again: Code 128 and Code 39. Both work. Here's how to pick.
| Code 128 | Code 39 | |
|---|---|---|
| Characters | All 128 ASCII characters | 43: A–Z, 0–9, space and - . $ / + % |
| Lower-case letters | Yes | No (capitals only) |
| Width for the same data | Narrower | Wider |
| Check character | Built in | Not required |
| Good for | Shipping, inventory, new projects | Older systems, badges, specifications that name it |
The quick comparison
- Code 128 can hold all 128 ASCII characters: upper and lower case letters, digits and symbols. It's compact, and it has a built-in check character.
- Code 39 holds capital letters A to Z, digits 0 to 9, and a few symbols (the space and - . $ / + %). That's 43 characters. It's wider, and it has no required check digit.
Size
Code 128 is more compact. It can pack two digits into one symbol, so a long number takes about half the space. Code 39 uses nine elements per character, so the same text comes out noticeably wider. If your label is narrow, that alone may decide it.
Characters
If you need lower-case letters, Code 128 is the straightforward answer. Code 39 only has capitals. Our Code 39 generator will convert lower-case letters for you, but a scanner will then read capitals.
Scanner support
Almost every scanner reads both. But some older systems were set up only for Code 39, and some scanners have Code 39 switched on by default and need Code 128 to be enabled. If you're adding barcodes to an existing system, check what it already expects.
Printing
Code 39 is simple, tolerant of rough printers, and easy to read at a glance. That's part of why it has lasted so long on industrial and government labels. Code 128 prints perfectly well on any decent printer.
So which should you choose?
- Choose Code 128 for new projects, shipping and inventory labels, mixed upper and lower case, long numbers, or narrow labels.
- Choose Code 39 when a standard, customer or older system asks for it, for example some automotive and defence labelling, or ID badges set up for it.
- Neither for products sold in shops. Those need an EAN-13 or UPC-A. See barcodes for products you sell.
When in doubt, make both with the barcode generator and scan them with the equipment you'll really use. The right answer is the one that scans cleanly on your scanner.
What happens if you pick the wrong one
Usually nothing dramatic. A scanner that isn't set up for a format simply won't read it, or reads a different value. The fix is nearly always to enable the format in the scanner's settings, or to make the barcode in the format the system expects. If a system you don't control asks for a particular type, use that.
Mixed letters and numbers
If your values mix letters and digits, such as "AB-12345", both formats work, and Code 128 will be narrower. If your values are all capitals and short, Code 39 is perfectly good too.
Other barcodes in the family
For product numbers use EAN-13 or UPC-A. For cartons use ITF-14. Our guide to printing barcode labels covers sizes and printers for all of them.
Frequently asked questions
Is Code 128 better than Code 39?
For new projects, usually yes, because it's more compact and holds more characters. Code 39 is better only when something you rely on already expects it.
Can one scanner read both?
Most can, but some need each format to be switched on in the settings.
Do I need a check digit for Code 39?
No. Code 39 doesn't require one. Code 128 includes its own check character automatically.
Which is easier to print on a basic printer?
Code 39 is simple and tolerant, but Code 128 prints fine on any decent printer. Test either on your actual equipment.