Code 128 vs Code 39: Which Barcode Should You Use?
Both encode letters and numbers, but they differ in density, character set and history. Here is how to choose between them.
The short answer
For most new projects, use Code 128. It is more compact, supports the full set of standard characters, and is what modern logistics and shipping systems expect.
Reach for Code 39 only when you are integrating with older equipment or a specification that explicitly requires it.
Character set
Code 39 encodes uppercase letters, digits, and a handful of symbols, around forty-three characters in total. It cannot represent lowercase letters.
Code 128 encodes all standard ASCII characters, including lowercase and punctuation, across three switchable subsets. One of those subsets packs pairs of digits together for high density.
Density and size
- •Code 128 is noticeably more compact, especially for numeric data.
- •Code 39 is wider for the same content, so it needs more label space.
- •On small labels, Code 128 often fits where Code 39 will not.
Reliability and check digits
Code 128 includes a mandatory checksum, so scanners can detect most misreads automatically. Code 39 can carry an optional check character but does not require one, which makes it slightly more error-prone in noisy environments.
When Code 39 still wins
Legacy systems, some government and defence specifications, and certain automotive standards were built around Code 39 and still mandate it. If your downstream system was designed decades ago, check its documentation before switching.