Code 128 vs Code 39 for inventory and labels
Retail barcodes like EAN-13 are for products sold in shops. For everything else, such as stock in a warehouse, asset tags on laptops, files, tickets and shipping labels, most businesses use Code 128 or Code 39. Both are free to use and need no registration.
Barcodes · Published 2026-10-07
Code 39: simple and widely supported
Code 39 dates from the 1970s. It encodes uppercase letters A to Z, digits 0 to 9, a space and a few symbols (- . $ / + %). Each character is a fixed pattern of bars, and the code starts and ends with an asterisk, which most generators add for you.
- Very easy to generate and supported by almost every scanner ever made.
- Still required by some industries and older systems, such as some automotive and defence standards.
- Not dense: each character takes a lot of space, so codes get long quickly.
- No lowercase letters unless a special extended mode is used.
Code 128: compact and flexible
Code 128 can encode all 128 standard ASCII characters, including lowercase letters and punctuation. It has three internal character sets, and set C packs pairs of digits into a single symbol, which makes numeric codes especially compact.
- Much denser than Code 39, so the same data fits in a shorter barcode.
- Includes a mandatory check character, which improves scanning accuracy.
- Used for shipping labels through its GS1-128 variant, for example the SSCC numbers on pallets.
- Supported by all modern scanners.
Which one should you use?
For new projects, choose Code 128. It is shorter, more reliable and handles any text you are likely to need. Choose Code 39 only when a customer, partner or existing system specifically asks for it.
A typical small business setup is to give each item or asset an internal code such as SKU-00412 or IT-LAPTOP-017, print it as Code 128 on labels, and scan it with an inexpensive USB or Bluetooth scanner that types the code into a spreadsheet or inventory app.
Tips for labels that scan every time
- Leave a clear margin (quiet zone) on both sides of the bars, at least ten times the width of the narrowest bar.
- Keep codes short. Shorter data means wider bars at the same label size.
- Print the human-readable text under the bars, so staff can type it if a label is damaged.
- Use a thermal label printer for large volumes. Thermal labels give crisp edges and are cheap per label.
- Avoid glossy laminates that reflect light into the scanner.
Numbering your items
Decide on a numbering pattern before printing hundreds of labels. Keep it short, avoid characters that are easily confused (O and 0, I and 1), and add a prefix per category if it helps people read the label. Store the list in a spreadsheet: that same file can then be uploaded to a batch barcode generator.
Batch printing with Zonlet
Zonlet's barcode generator supports Code 128 and Code 39. In batch mode you upload a CSV or Excel file with one code per row, set copies if you need several labels of each, and download a ZIP of images or a print-ready PDF sheet. The file is read in your browser and is not uploaded.