Standards
4 min readJanuary 14, 2026Choosing between Code 128 and Code 39
Two workhorse linear symbologies, one clear default — and a few legacy cases where the older one still wins.
Code 39 came first, is easy to print and needs no check digit. Code 128 is denser, encodes the full ASCII set and is what GS1 standardised on. For anything new, Code 128 is the default.
Density Code 128 encodes numeric pairs in a single symbol character, so numeric data is roughly twice as compact as Code 39. On a small label that difference decides whether the symbol fits at all.
Character set Code 39 covers digits, uppercase letters and a handful of symbols. Anything with lowercase letters or punctuation needs Code 128 — or the fragile Code 39 Full ASCII extension.
Data integrity Code 128 has a mandatory checksum. Code 39 does not, and mod-43 is optional and inconsistently supported.
When Code 39 still makes sense - Legacy systems and scanners you cannot replace - Internal asset tags where humans read the value as often as scanners do - Environments where symbols are printed by very low-resolution devices
#code128
#code39
#logistics