Free Code 39 Barcode Generator — Create CODE39 Barcodes Online
Table of Contents
Code 39 is one of the oldest and most widely deployed barcode symbologies. While Code 128 has largely replaced it for new systems, millions of existing scanners and databases still depend on Code 39 — particularly in automotive manufacturing, military logistics, and legacy inventory software.
This free generator creates Code 39 barcodes in your browser. No upload, no account, no cost. Download PNG or SVG.
What Is Code 39?
Code 39 was developed in 1974 by Intermec (originally called 3 of 9 code, because 3 of the 9 elements in each character are wide). It encodes 43 characters:
- Uppercase letters A through Z
- Digits 0 through 9
- Seven special characters: - . space $ / + %
- Start/stop character (*) that the generator adds automatically
Code 39 does not encode lowercase letters. If your data contains lowercase, convert to uppercase before generating. The same SKU in lowercase will not encode correctly.
| Property | Code 39 | Code 128 (comparison) |
|---|---|---|
| Character set | Uppercase A-Z, 0-9, 7 symbols | Full ASCII (128 chars) |
| Checksum | Optional (Mod 43) | Mandatory (auto-calculated) |
| Density | Low — wider than Code 128 | High — compact |
| Self-checking | Yes (no mandatory checksum needed) | No (checksum required) |
Industries That Still Use Code 39
Code 39 persists in specific industries where legacy systems and standards require it:
- Automotive manufacturing (AIAG): The Automotive Industry Action Group standardized Code 39 for parts labeling in the 1980s. Many automotive supply chains still require it on component labels.
- US Military (MIL-STD-1189): The Department of Defense specified Code 39 as the standard barcode for military equipment and supply chain labels. Some defense contractors still ship with Code 39 labels.
- Healthcare (HIBCC): The Health Industry Business Communications Council originally standardized Code 39 for healthcare product labeling, though most systems have since migrated to Code 128 or GS1 DataBar.
- Legacy inventory systems: ERP and WMS software from the 1990s and early 2000s often only reads Code 39. If your scanner displays an error on Code 128 labels, your system may be Code 39 only.
How to Generate a Code 39 Barcode
- Open the barcode generator and select CODE39 from the format dropdown
- Type your data in uppercase letters, digits, and the allowed special characters only
- The barcode renders live — note that Code 39 barcodes are wider than Code 128 for the same data
- Increase bar height if needed for your label size
- Download as PNG or SVG
Data rules to follow:
- Uppercase only — no lowercase letters
- No @ # ! or other special characters beyond the 7 supported symbols
- The asterisk (*) start/stop character is added by the generator automatically — do not include it in your data
Code 39 vs Code 128: When to Choose Which
| Situation | Choose | Reason |
|---|---|---|
| New inventory system, no existing constraints | Code 128 | More compact, full ASCII, standard checksum |
| Automotive parts supplier (AIAG required) | Code 39 | Industry standard requirement |
| Defense contractor (MIL-STD) | Code 39 | Military specification requirement |
| Legacy scanner only reads Code 39 | Code 39 | Scanner compatibility |
| Data contains lowercase letters | Code 128 | Code 39 does not support lowercase |
| Label space is limited | Code 128 | Code 128 is more compact for same data |
Try It Free — No Signup Required
Runs 100% in your browser. No data is collected, stored, or sent anywhere.
Open Free Barcode GeneratorFrequently Asked Questions
Does Code 39 require a checksum digit?
No — Code 39 is self-checking, meaning each character has a built-in error detection mechanism. A checksum (Mod 43) is optional and rarely used in practice. If a specific system requires Mod 43, most barcode generators offer it as an option. This generator creates standard Code 39 without the optional checksum.
Why is my Code 39 barcode so much wider than a Code 128 barcode with the same data?
Code 39 is a lower-density format — it uses more physical space to encode each character than Code 128. For the same data, Code 39 is typically 30-40% wider. If space on your label is limited, consider whether Code 128 would meet your system requirements instead.
Can I encode lowercase letters in Code 39?
No. Standard Code 39 only supports uppercase A-Z, digits 0-9, and seven special characters. There is an extended Code 39 format that supports full ASCII including lowercase, but it is rarely used in practice. If you need lowercase, use Code 128 instead.

