§WHAT IS
What is Code 39 and why is it called that?
Code 39 is an alphanumeric barcode published in 1974 by the American company Intermec. It was the first format capable of encoding letters in addition to numbers and remains alive due to compatibility with old systems.
Code 39 was important in its day. In 1974 Intermec published the format in response to a clear limitation: until then barcodes only accepted digits (Codabar, 2 of 5 Interleaved). To identify parts with alphanumeric references in heavy industry, defense or aviation, a format that encoded letters was needed. Code 39 extended capabilities to 43 characters: uppercase A-Z, digits 0-9, and the symbols dash, period, dollar, slash, plus, percent and asterisk, plus space.
The name comes from its structure: each character is encoded with 9 elements (5 bars and 4 spaces), of which exactly 3 are wide and 6 narrow. Hence Code 39 (3 of 9). The asterisk is used as start and end delimiter of the code, helping the reader identify where the string begins and ends.
After Code 39 came Code 128 (1981) with greater density and full ASCII support. Code 39 was relegated to legacy industrial systems where hardware updates are costly or impossible: defense, aviation, legacy automotive, 80s-90s industrial machinery, public healthcare with non-renewed systems. The FAA, TSA and NATO used Code 39 as official standard for decades, anchoring the format to those sectors.
Code 39 is free of patents and royalties since publication, like Code 128.
§WHEN TO USE
When to use Code 39 today?
Only when a legacy system requires it for compatibility. For new internal or industrial labeling projects, Code 128 is strictly better in density, character set and error detection.
If you start a new labeling project, don't choose Code 39. Code 128 offers 40-50% less width for the same data in uppercase, supports lowercase and full special characters, and includes mandatory check digit. Code 39 only makes sense when an external system requires it.
Where Code 39 still lives in 2026:
- The FAA and airlines still use it on baggage tags, maintenance forms and technical reports. The transition to Code 128 or QR is in progress but the installed base of Code 39 hardcoded readers is huge.
- 80s-90s defense systems with readers integrated in long-life military equipment.
- Legacy automotive industry from the 80s-90s in spare parts warehouses.
- Old hospitals with HIS systems that only read Code 39.
- Industrial machinery where readers are integral parts of the equipment (CNC, production lines).
Outside those cases, Code 128 is the right choice. The only valid reason to prefer Code 39 today is the inability to change the receiving system.
§SPECS
Code 39 technical specifications
Code 39 is standardized by ISO/IEC 16388:
- Length: 1 to 43 useful characters, not counting the asterisk delimiters.
- Character set: A-Z (uppercase), 0-9, and symbols -, ., $, /, +, %, * and space. 43 characters total.
- Check digit: optional, modulo 43. Most real implementations don't use it because some legacy systems don't accept it.
- Delimiters: asterisk (*) at start and end of the code. The reader recognizes them as start/end and discards them from the payload.
- Dimensions: recommended X factor between 0.191 mm (high density) and 1.016 mm (industrial resilient). Mandatory quiet zone of 10X on each side.
- Density: approximately 16 mm per character at standard X factor. For 10 alphanumeric characters, the code occupies about 16 cm of width, vs 8 cm with Code 128.
- Full ASCII variant: extends the set to the 128 ASCII characters via two-character escape sequences. Requires compatible reader.
- Damage tolerance: optional checksum detection. No error recovery.
§COMPARISON
How does Code 39 compare to Code 128 and other linear formats?
Code 128 is strictly superior except for legacy compatibility. Code 93 offers an intermediate compromise. Code 39 only makes sense for external systems that demand it.
Code 39 vs Code 128: for the same alphanumeric data in uppercase, Code 128 occupies approximately half the width of Code 39. Code 128 includes mandatory check digit (modulo 103), supports lowercase and full printable ASCII, and has three subsets the reader switches between automatically.
Code 39 vs Code 93: Code 93 was an intermediate improvement published by Intermec in 1982. Code 93 encodes full ASCII in 9 elements per character and improves Code 39 density by approximately 30%. It saw minor adoption: some Canadian postal and military systems. If you doubt between Code 39 and Code 93, almost always the right option is to skip both and use Code 128.
Code 39 vs 2 of 5 Interleaved: ITF is numeric only and very compact, but doesn't support letters. If your legacy system accepts both Code 39 and ITF and you identify 100% numeric references, ITF can save width.
Code 39 vs Code 39 Full ASCII: the Full ASCII variant extends to the 128 ASCII characters by encoding the extra characters via pairs of base characters. Only works if the reader is configured to interpret Full ASCII.
§FAQ
Frequently asked questions about CODE39
Q.01
Why does Code 39 remain so present in aviation?
Because the FAA and TSA established Code 39 as the official standard in the 80s for baggage tags, maintenance forms and aircraft technical reports. Changing the format implies updating thousands of readers in airports worldwide and rewriting certified procedures. The cost and regulatory risk don't compensate for the marginal improvement.
Q.02
Does Code 39 support lowercase?
Not natively. Standard Code 39 only has uppercase A-Z. The Full ASCII variant encodes lowercase via two-character escape sequences (for example +A for a), but requires the reader to be configured to interpret them. Most real legacy implementations are uppercase-only.
Q.03
Do I need to print the asterisks as human-readable text?
It is optional. The asterisks delimit start and end of the code at bar level, but some systems show them in the rotated text below and others hide them. If your reader discards them when decoding (most do), it's better to hide them in the human text.
Q.04
Is Code 39 easier to print than Code 128 in home printing?
Marginally. Code 39 has wider bars that tolerate low-resolution printing better (300 dpi domestic). But that advantage disappears at 600 dpi or higher. If your printer has reasonable quality, Code 128 prints without issue.
Q.05
What real density does Code 39 have versus Code 128 with typical data?
For an alphanumeric reference of 10 uppercase characters (e.g. PROD-A1234), Code 39 occupies about 16 cm at X factor of 1 mm. Code 128 occupies about 7 cm for the same data. The difference grows when there are many consecutive digits: Code 128 subset C encodes pairs of digits in a single bar.