Free Code 39 barcode generator
Type a value, paste a list, upload a CSV, or auto-number a sequence — every entry renders as a Code 39 barcode in your browser. Download one PNG, the batch as a ZIP, or a print-ready Avery sheet. No sign-up, no watermark.
Uppercase A–Z, digits and - . $ / + % and space. No lowercase.
0 of 0 codes ready
Add values on the left to see your codes here.
Generated in your browser — nothing is uploaded.
Code 39 is from 1974, and by every technical measure it should be gone. It fits 43 characters — uppercase letters, digits, and - . $ / + % with space — takes up roughly a third more label width than Code 128 for the same value, and its check digit is optional, so most systems simply skip it. And yet it keeps turning up in specs: military logistics standardized on it decades ago (MIL-STD-1189, and Code 39 still appears across LOGMARS-era labeling), the automotive supply chain adopted it through AIAG, and a warehouse full of scanners and label software from that era reads it with zero configuration. That last part is the whole reason to use it in 2026 — when the spec, the customer, or the twenty-year-old scanner fleet says Code 39, you print Code 39.
A few habits of the format worth knowing before a batch run. Every symbol is framed by asterisks — they're start/stop markers the encoder adds, so don't type them into your values; a scanner strips them on read and returns just your data. Lowercase letters don't exist in the base character set; this generator rejects them at validation rather than silently uppercasing, because a value that changes case between your spreadsheet and your scan is how two systems end up disagreeing about the same asset. And there's no mandatory checksum — Code 39 is self-checking at the character level, which catches misprints but not typos. If the receiving system wants the optional mod-43 check character, generate inside that system's tooling; adding one blindly gives every scan a trailing character nobody expects.
Starting a new tagging scheme from scratch, with no legacy hardware to appease? Use Code 128 instead — denser, lowercase-capable, always checksummed. The side-by-side is on that page.
Related free tools
Same workflow, different code. No sign-up on any of them.
QR Code Generator
Create QR codes for links, text, Wi-Fi, email, or phone. Customize colors, add a logo, download PNG or SVG, all in your browser.
Open generatorvCard QR Code Generator
A QR code that adds a contact in one scan — name, company, phone, email. Static, no expiry, no account, exported as PNG or SVG.
Open generatorBulk QR Code Generator
Turn a list, CSV, or numbered sequence into up to 500 QR codes at once, then export them as PNGs, a ZIP, or a print-ready Avery sheet.
Open generatorBulk Barcode Generator
The same batch workflow for linear barcodes. Paste a list or upload a CSV and render dozens at once as PNGs, a ZIP, or an Avery PDF sheet.
Open generatorBulk Code 128 Barcode Generator
The alphanumeric format most asset tags use. Paste a list, upload a spreadsheet export, or number a sequence — up to 500 Code 128 codes in one run.
Open generatorUPC Barcode Generator
UPC-A and UPC-E for retail products, plus EAN-13 and EAN-8 for markets outside North America. Check digits computed as you type.
Open generatorBarcode & QR Scanner
Read a code back with your camera or from a photo. QR, EAN, UPC, Code 128, and Data Matrix, decoded in your browser.
Open scannerEAN-13 Barcode Generator
Retail EAN-13 with the check digit computed for you — type 12 digits, get 13. Single codes or a CSV batch, verified before they render.
Open generatorGS1-128 Barcode Generator
Element strings in (AI) syntax with FNC1 placed automatically — GTIN and SSCC check digits verified, application identifiers validated.
Open generatorData Matrix Generator
ECC-200 Data Matrix for part marking and tiny labels — the square code that fits where QR cannot. One code or a batch of 500.
Open generatorPDF417 Barcode Generator
The stacked format on shipping papers and passes. Renders single codes or a CSV batch, readable by laser guns and cameras alike.
Open generatorQR Code & Barcode Repair
Upload a photo of a code that won't scan. The tool decodes what survives in the print and rebuilds a clean replacement to reprint.
Open repair toolCode 39 — common questions
The ones that surface once the labels meet the scanners.
Why does the tool reject my lowercase values?
Base Code 39 has no lowercase — its 43 characters are uppercase A–Z, digits, and - . $ / + % with space. Rather than uppercase your data silently, the row flags it so you decide: uppercase the source values, or switch to Code 128, which encodes both cases.Do I need to add the asterisks around the value?
No — the * start and stop characters are part of the symbol, not the data. The encoder adds them, the scanner removes them. Type only the value you want back from a scan.Why are my Code 39 labels so wide?
That's the format: each character spends nine elements, wide and narrow, and there's no numeric compression. A 10-character value that fits a small Avery cell in Code 128 may overflow it in Code 39. Shorten values, print smaller with a 300 dpi check, or use the denser format if your scanners allow.Does this generator add a mod-43 check digit?
No. Most Code 39 deployments run without one, and a check character added where the receiving system doesn't expect it shows up as a stray trailing character in every scan. If your spec requires mod-43, the system enforcing that spec should generate it.
Tagging assets at scale? Talk to sales
Values render on a local canvas in your browser and never reach a server; the ZIP and PDF libraries load only when you click a download. Batches run to 500 rows.
If the scan should open a record instead of just echoing an ID, that's asset tagging in UNIO24 — and if you're mid-migration from a legacy Code 39 system, existing labels keep working: tag IDs bind on import, no relabeling pass required.