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.
Same workflow, different code. No sign-up on any of them.
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 generatorA QR code that adds a contact in one scan — name, company, phone, email. Static, no expiry, no account, exported as PNG or SVG.
Open generatorTurn 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 generatorThe 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 generatorThe 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-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 generatorRead a code back with your camera or from a photo. QR, EAN, UPC, Code 128, and Data Matrix, decoded in your browser.
Open scannerRetail 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 generatorElement strings in (AI) syntax with FNC1 placed automatically — GTIN and SSCC check digits verified, application identifiers validated.
Open generatorECC-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 generatorThe stacked format on shipping papers and passes. Renders single codes or a CSV batch, readable by laser guns and cameras alike.
Open generatorUpload 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 toolThe ones that surface once the labels meet the scanners.
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.