Bulk Barcode Generator Generate Free →
✓ Free forever · No signup · No watermark

Free Code 39 Barcode Generator

Generate Code 39 barcodes in bulk from a CSV or Excel file. The go-to format for government, automotive, and healthcare applications requiring legacy scanner compatibility. Export print-ready PDF, PNG, SVG, or ZPL for Zebra thermal printers. No signup, no row limit, no watermark.

Generate Code 39 Barcodes Free →
Free forever No signup required No row limit Data stays in browser

Why Use Our Code 39 Generator?

🏛️

Legacy Scanner Compatible

Code 39 is supported by virtually every barcode scanner ever manufactured — including 30-year-old hardware still in use in government and automotive facilities.

📋

No Check Digit Required

Unlike Code 128 or EAN, Code 39 requires no check digit calculation, simplifying manual barcode creation and legacy system integration.

🖨️

ZPL & PDF Export

Export native ZPL II for Zebra thermal printers, print-ready Avery PDFs, or high-resolution PNGs — all at 300 DPI.

Generate Code 39 Labels in 3 Steps

1

Paste or Upload

Paste uppercase codes one per line, or upload a CSV/Excel file. Values must use A–Z, 0–9, and allowed symbols only.

2

Select Code 39

Choose Code 39 from the format picker. Set label size and export format (PDF, PNG ZIP, SVG, or ZPL).

3

Download & Print

Download your batch. Labels are rendered at 300 DPI for reliable scanning when printed at standard label sizes.

When to Use Code 39 Barcodes

Government

US Government & Defense

MIL-STD-1189 mandates Code 39 for Department of Defense property and asset labeling.

Automotive

Automotive Industry (AIAG)

The Automotive Industry Action Group (AIAG) specifies Code 39 for parts labeling and container tracking in the automotive supply chain.

Healthcare

Blood Bank & Lab Labels

Healthcare and blood bank systems use Code 39 for specimen identification on tubes, bags, and containers.

Asset Tracking

Government Asset Tags

Federal, state, and local government agencies use Code 39 for equipment and asset inventory tags.

What is a Code 39 Barcode?

Code 39 (also written Code 3 of 9) is a discrete, variable-length linear barcode symbology introduced in 1974. Each character is encoded as a pattern of five bars and four spaces, with three of the nine elements being wide — giving the format its '3 of 9' name. The barcode is self-checking and requires no check digit in most implementations.

Although Code 128 has largely superseded Code 39 in modern warehouse and logistics applications due to its higher data density, Code 39 remains the mandated standard in several regulated industries. The US Department of Defense, the automotive industry's AIAG standard, and many healthcare systems specify Code 39 by name in their labeling requirements — making compatibility with this format still essential for suppliers in these sectors.

Code 39 Technical Specification

PropertyValue
Symbology typeLinear (1D), discrete, variable length
Character set43 characters — 0–9, A–Z uppercase, and - . space $ / + %
Structure per character9 elements (5 bars + 4 spaces), 3 of them wide
Start / stop delimiterAsterisk *, added automatically
Check characterOptional, modulo-43
Self-checkingYes — a single misread element cannot produce a valid character
Density vs Code 128Roughly 30 % wider for the same data
ISO standardISO/IEC 16388
Registration requiredNone

Code 39 is a discrete symbology, meaning each character is encoded independently and separated by a narrow inter-character space. That structure makes it simple for early scanner hardware to decode but wastes horizontal room — the gaps carry no data. Code 128, by contrast, is continuous, which is the main source of its density advantage.

Where the name comes from

"Code 39" and "Code 3 of 9" describe the same encoding scheme. Each character is built from nine elements — five bars and four spaces — of which exactly three are wide and six are narrow. Three of nine. The ratio between wide and narrow elements is typically 2:1 or 3:1, and keeping that ratio consistent across your print run matters more for scan reliability than the absolute bar width does.

Full ASCII Mode, Check Characters, and Why Code 128 Superseded It

The asterisks are not part of your data

Every Code 39 barcode is delimited by an asterisk at each end. These start and stop characters tell the scanner where the symbol begins and which direction it is being read. Our generator adds them automatically — you should not type asterisks into your data. If a scanner reports a value wrapped in asterisks, the scanner's own configuration is set to transmit the delimiters, which is a setting on the device rather than a fault in the barcode.

Full ASCII Code 39

The base 43-character set has no lowercase letters and no punctuation beyond seven symbols. "Full ASCII Code 39" works around this by using four of those symbols ($ / + %) as shift prefixes, so two encoded characters represent one ASCII character. It works, but it doubles the width of every escaped character and requires the scanner to be configured for Full ASCII mode. If your data needs lowercase letters or arbitrary punctuation, this is a strong signal to use Code 128 instead.

The optional modulo-43 check character

Code 39 does not require a check character, because the format is inherently self-checking: a single misread element cannot produce another valid character, so most substitution errors are caught structurally. A modulo-43 check character can be appended for applications where even a low substitution-error rate is unacceptable — some healthcare and defence specifications mandate it. Note that both the printer and the scanner must agree on whether the check character is present, or the scanner will report it as an extra trailing character.

Where Code 39 still legitimately persists

For a genuinely new internal system with no legacy constraint, Code 128 is the better choice on every measure: it supports the full ASCII set natively, packs roughly 30 % narrower for the same data, and includes a mandatory check character. Choose Code 39 when something downstream requires it — not by default.

History: Code 39 was developed in 1974 by David Allais and Ray Stevens at Intermec, and was the first alphanumeric barcode to see broad industrial adoption. Its 50-year installed base is precisely why it survives in sectors with long equipment-replacement cycles.

Code 39 Barcode — Frequently Asked Questions

What is a Code 39 barcode?
Code 39 (also called Code 3 of 9) is a linear barcode that encodes uppercase letters A–Z, digits 0–9, and seven special characters (space, $ + − . / %). It was one of the first alphanumeric barcodes and remains widely used in industries requiring compatibility with older scanning hardware.
What is the difference between Code 39 and Code 128?
Code 128 is more space-efficient and can encode the full 128-character ASCII set, including lowercase letters. Code 39 is limited to 43 characters (uppercase only) and produces physically wider barcodes for the same data. Code 39 is preferred when you need guaranteed compatibility with older or specialized scanners that may not support Code 128.
Does Code 39 require a check digit?
No. A check digit is optional in Code 39 and rarely used in practice. Our generator creates standard Code 39 barcodes without a check digit by default, which is compatible with all Code 39 scanners.
What industries still use Code 39?
Code 39 is standard in the US Department of Defense (MIL-STD-1189), US automotive industry (AIAG standard), healthcare (blood bank labeling), and government asset tracking. Many legacy warehouse management systems were designed around Code 39 and still require it.
Can I generate Code 39 barcodes from an Excel or CSV file?
Yes. Upload your Excel or CSV file, select the column with your values (uppercase letters, numbers, and symbols only — lowercase letters are not supported by Code 39), and generate all barcodes in one batch.
How many characters can a Code 39 barcode store?
Code 39 has no defined maximum length, but practical reliability is best at 10–15 characters. Longer values produce physically wide barcodes that can be harder to scan with narrow-beam scanners. For longer alphanumeric codes, Code 128 is a better choice.
Should I use Code 39 or Code 128 for a new project?
Code 128, unless something downstream specifically requires Code 39. Code 128 handles the full ASCII set including lowercase, packs roughly 30 % narrower for the same data because it is continuous rather than discrete, and includes a mandatory check character. Code 39 remains the right answer when you are feeding an existing system built around it — AIAG automotive labels, DoD LOGMARS, HIBC healthcare labelling, or library circulation software configured decades ago.
Why does my Code 39 barcode show asterisks around the value?
The asterisk is Code 39's start and stop delimiter, and it is part of the symbol rather than your data. Our generator adds it automatically, so you should never type asterisks into your input. If your scanner reports the value wrapped in asterisks, that is a scanner setting — it has been configured to transmit the delimiters — and you can turn it off in the device's configuration rather than changing the barcode.
Does Code 39 need a check digit?
Not usually. Code 39 is self-checking: because each character uses exactly three wide elements out of nine, a single misread element cannot produce a different valid character, so most substitution errors fail structurally. An optional modulo-43 check character exists for applications that mandate it, notably some healthcare and defence specifications. If you add one, the scanner must also be configured to expect it, or it will report the check character as a trailing character in your data.
Other Barcode Formats