What you're using right now
- 100+ barcode & QR symbologies
- Live preview & customization
- PNG & SVG export, no login
- Copy to clipboard
Loading Barcode Mint…
Free Online Barcode & QR Code Generator
Code 39 is the barcode that started self-checking alphanumeric encoding, and it's still trusted today for its simplicity and near-universal scanner support.
Open the generator ↓Turn a CSV — or a numbered sequence — into hundreds of barcodes at once, exported as a ZIP of images or a print-ready PDF sheet. Launching with Pro.
The browser generator stays free forever. Paid plans are for teams who need bulk output and developers who need the REST API at scale — commercial license included. Tell us what you'd use; early-list members get first access and launch pricing.
What you're using right now
For designers & teams
Priced by requests. Commercial license and self-serve keys included; usage dashboard at launch.
Code 39 is one of the oldest and most widely supported linear barcode symbologies, first introduced in 1974. It encodes uppercase letters A–Z, digits 0–9, and a limited set of symbols: hyphen, period, dollar sign, forward slash, plus sign, percent sign, and space. Every valid Code 39 barcode is bounded by an asterisk (*) start/stop character, which is why you'll sometimes see it referred to informally as a symbology with visible "bookend" markers when the human-readable text is shown beneath the bars.
Code 39 remains popular decades after newer, denser symbologies emerged because it's simple, robust, and supported by essentially every barcode scanner ever made — including older laser scanners with no configuration required. Its lower density compared to Code 128 means longer barcodes for the same data, but for short identifiers that tradeoff rarely matters.
Each Code 39 character is represented by 9 elements — 5 bars and 4 spaces — of which exactly 3 are wide and 6 are narrow, giving the symbology its "3 of 9" name (Code 39 is a contraction of that). This fixed wide/narrow ratio design makes it self-checking: a scanner can validate the internal structure of each character independently, which is part of why Code 39 has a reputation for reliability even on lower-quality prints, without requiring a mandatory check digit.
A check digit (modulo 43) is available as an option but isn't required by the base standard, unlike Code 128 where it's mandatory. Because the character set tops out at 43 symbols (26 letters, 10 digits, 7 symbols, plus the start/stop asterisk), Code 39 can't represent lowercase letters or extended ASCII directly — for that, see Code 39 Full ASCII, which layers a two-character encoding scheme on top of standard Code 39 to reach the full character range.
Code 39's long track record and broad hardware compatibility keep it in active use across several industries:
Code 39 is standardized as ISO/IEC 16388. Its character set covers 43 symbols: A–Z, 0–9, and seven special characters (space - . $ / + %), plus the asterisk used exclusively as the start/stop delimiter. Each character is built from 9 elements — 5 bars and 4 spaces — of which exactly 3 are wide, giving each character a fixed 3-of-9 ratio regardless of which character it represents. There's no fixed maximum length; Code 39 barcodes grow linearly with data length and can become quite long relative to denser symbologies. A modulo-43 check digit is available but optional in the base standard, unlike Code 128's mandatory checksum.
Select Code 39 from Barcode Mint's symbology list. Enter your data using uppercase letters, digits, and the supported symbols (- . $ / + % and space) — lowercase letters aren't valid in standard Code 39, so if your source data includes them, either convert to uppercase or switch to Code 39 Full ASCII. The live preview updates as you type, showing the asterisk start/stop characters automatically. Then:
For numbered part or asset series, use the batch/sequence generator. For labeling an entire inventory list, the bulk CSV → ZIP/PDF tool converts a spreadsheet into a complete set of barcode files or a printable PDF sheet. To integrate Code 39 generation into your own systems, call the REST API with /barcode?type=code39&data=YOURDATA.
Code 39's forgiving design still benefits from careful printing:
Against Code 39 Full ASCII, standard Code 39 is limited to uppercase and a handful of symbols, while Full ASCII layers a two-character shift scheme on top to reach lowercase and the full ASCII range — at the cost of roughly doubling barcode length for those extra characters. Against Code 93, Code 39's successor, Code 93 covers the same core character range in a noticeably shorter barcode with mandatory dual check digits, but isn't quite as universally supported by older scanners. Against Code 128, Code 39 is far less dense and lacks lowercase support, but its simplicity and decades-long hardware compatibility keep it entrenched in automotive and defense standards that predate Code 128's adoption.
No, the base Code 39 standard doesn't require one because the symbology is self-checking by design. An optional modulo-43 check digit is available for extra error detection in regulated or high-reliability applications.
Code 39 remains popular for its simplicity, self-checking reliability, and near-universal hardware support, especially in industries like automotive and defense with long-standing standards built around it.
Yes, Barcode Mint's bulk CSV → ZIP/PDF tool generates a full batch of Code 39 barcodes from a spreadsheet in one step.