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.

Symbology

Uppercase A–Z, digits and - . $ / + % and space. No lowercase.

Input
Options

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 generator

vCard 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 generator

Bulk 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 generator

Bulk 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 generator

Bulk 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 generator

UPC 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 generator

Barcode & 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 scanner

EAN-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 generator

GS1-128 Barcode Generator

Element strings in (AI) syntax with FNC1 placed automatically — GTIN and SSCC check digits verified, application identifiers validated.

Open generator

Data 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 generator

PDF417 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 generator

QR 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 tool

Code 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.

up arrow