Free bulk Code 128 barcode generator
Paste a column of asset IDs, upload the CSV your spreadsheet just exported, or set a prefix and let the tool number the run for you. Up to 500 Code 128 codes render at once, each with its mod-103 check character already worked out. Take the batch as PNGs, a ZIP, or an Avery sheet that goes straight to the printer. No sign-up, no watermark.
Any letters, digits and symbols, any length — best for internal asset tags.
0 of 0 codes ready
Add values on the left to see your codes here.
Generated in your browser — nothing is uploaded.
There are four ways to get values into the batch, and between them they cover most of what people already have sitting around. Paste one value per line when the list is in front of you. Upload a CSV and pick which column holds the value and which one holds the label underneath it — that happens after the file loads, so an export straight out of Excel or Sheets needs no cleanup first. Or skip the file entirely: give the Sequence mode a prefix like AST-, a starting number and a zero-pad width, and it numbers the whole run.
Five hundred rows per batch. Paste more than that and the tool uses the first 500 and says so, instead of quietly dropping the rest.
Worth knowing before you commit a batch to label stock: Code 128 codes from the same run do not come out the same width. Subset C packs two digits into one symbol, so 100234 prints noticeably narrower than AST-100234. If the labels have to sit in identical slots on a sheet, keep the ID format consistent across the batch — same prefix, same digit count — and the widths fall into line. Mixed-length IDs are fine on individual labels and awkward on a grid.
Then take the batch out as a ZIP of individual PNGs, as a PDF sized to a standard Avery sheet, or send the preview grid to the printer.
Code 128 encodes all 128 ASCII characters — uppercase and lowercase letters, digits, punctuation, control codes — at any length. That range is why it became the default for internal asset tags, work orders, and warehouse labels: whatever numbering scheme you already run, Code 128 carries it unchanged.
The format has three subsets. Subset A covers uppercase letters and control characters, subset B covers upper and lower case plus punctuation, and subset C packs two digits into one symbol, roughly halving the width of a numeric code. The encoder switches between them on the fly and picks the shortest representation for your data, so there is nothing to configure.
Every symbol also carries a mod-103 check character derived from the payload. This generator computes it for you — the value you type is the value a scanner hands back.
GS1-128, formerly UCC/EAN-128, is Code 128 with a convention on top: an FNC1 character in the first position marks the symbol as GS1, and the payload is split into application identifiers such as (01) for a GTIN or (17) for an expiry date. Retail and pharma trading partners require that structure — the dedicated GS1-128 generator validates the identifiers and places FNC1 for you. For internal tagging you want plain Code 128, which is what this tool produces.
Labeling an actual retail product rather than an internal asset? That calls for a UPC or EAN code, not Code 128 — the dedicated UPC barcode generator computes the check digit for UPC-A, UPC-E, EAN-13, and EAN-8.
Code 128 vs Code 39
| Code 128 | Code 39 | |
|---|---|---|
| Character set | All 128 ASCII characters | 43 characters: A-Z, 0-9, and - . $ / + % plus space |
| Lowercase letters | Yes | No — Extended Code 39 aside |
| Density | High — subset C stores two digits per symbol | Low — roughly 30-50% wider for alphanumeric data, well over twice as wide for purely numeric data |
| Check character | mod-103, always present | Optional mod-43, usually omitted |
| Typical use | Asset tags, logistics, healthcare, GS1-128 | Legacy inventory, military and automotive systems |
Code 39 survives mostly because decades-old scanners and label software handle it without setup. For anything new, Code 128 fits more data into less label, validates itself, and accepts the mixed-case IDs that most asset registers use.
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 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 scannerCode 39 Barcode Generator
The legacy industrial format that old scanner fleets and military specs still require. One code or a batch of 500, validated as you type.
Open generatorEAN-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 toolBulk Code 128 — common questions
Edge cases that show up when you print a whole batch rather than one label.
My spreadsheet export has a header row and six columns I do not need. Do I have to clean it up first?
No — upload it as it comes. The header row is detected on its own, and the tool guesses which column holds the barcode value and which one holds the caption from the header names. If it guesses wrong, switch the columns yourself after the file loads. Everything else in the file is ignored.Can each code in the batch carry its own caption?
Yes. Give the CSV a second column —AST-001,Drill— and each barcode prints with its own human-readable line underneath. Without that column the value itself is used as the caption.Is 500 codes a hard ceiling?
Per batch, yes, and it is a real limitation rather than a paywall: every code is drawn in your own browser, and past roughly 500 the page gets slow on modest hardware. For a 2,000-tag rollout, run four batches — the sequence mode makes that painless, since you only move the start number.Do the codes in one batch all come out the same width?
Only if the values have the same shape. Code 128 switches into subset C for runs of digits and packs two of them per symbol, so a purely numeric ID prints much narrower than the same ID with a letter prefix. Keep one format across the batch when the labels have to line up in a grid.
Tagging assets at scale? Talk to sales
Nothing you paste or upload leaves the machine. Every code in the batch is drawn onto an off-screen canvas in your own browser, and the ZIP and PDF libraries load only when you click a download — a list of internal asset IDs never reaches our servers, which is not something you can assume about every generator that asks you to upload a file.