DEV Community

Wenjie Zhang
Wenjie Zhang

Posted on Originally published at barcodegen.net

The Complete Guide to Barcode Generation: How It Works, Common Formats, and Batch Generation in Practice

Barcodes are practically standard equipment in business systems, warehouse WMS, and e-commerce back ends. This guide goes from the underlying principle to real-world usage, focusing on how to generate barcodes efficiently and in bulk, comparing common formats, and ending with a zero-cost online option.

What a barcode actually is

A barcode encodes a string of data (digits/letters) into a pattern of bars and spaces that an optical reader can decode fast. Key points:

  • Encoding rules: each symbology has a fixed character set and start/stop characters (e.g., Code 128's Start/Stop).
  • Check digit: some formats (EAN-13, UPC-A) append a check digit computed by a weighted algorithm to catch entry errors.
  • Quiet zone: blank margins on both sides, typically 10× the module width, or the symbol won't scan.

Common formats compared

Format Type Capacity Typical use
Code 128 1D variable, full ASCII logistics, warehousing, internal traceability
EAN-13 1D 13 digits retail products
UPC-A 1D 12 digits North-American retail
Code 39 1D 43 chars industrial, automotive
QR Code 2D up to ~7 KB check-in, redirect, traceability
Data Matrix 2D high density electronics, medical part marking
PDF417 2D large text IDs, logistics documents

Selection guidance:

  • Internal IDs / serial numbers → Code 128 (high density, full charset).
  • Retail products sold outward → apply for EAN-13 / UPC-A from GS1.
  • Mobile interaction (scan to redirect) → QR Code.

Generation: programmatic vs online

Programmatic (Node / Python): libraries like bwip-js (JS) or python-barcode (Python) let you embed generation in a pipeline and automate it. Downside: changing formats means changing code, and non-technical teammates can't use it.

Quick Python example with python-barcode:

import barcode
from barcode.writer import ImageWriter

# Generate a Code 128 barcode from a value
value = "A-01-01"
rv = barcode.get("code128", value, writer=ImageWriter())
rv.save("bin-label")  # writes bin-label.png
Enter fullscreen mode Exit fullscreen mode

Online generation: better for ops/warehouse self-service and for quickly validating a format. The free tool I use is BarcodeGen, covering 35+ formats, with the highlights:

  • Runs in the browser — no install, no login.
  • Batch mode: upload a CSV or paste a text list and generate a whole batch in one click.
  • Exports PNG / SVG; SVG drops straight into design files or print.
  • Built-in scanner and label printing — generation to stickering in one place.

Batch generation in practice

Take "batch-printing warehouse bin labels" as an example:

  1. Prepare data: a column of bin IDs (e.g., A-01-01A-12-30) saved as CSV.
  2. In the tool, pick Code 128 and import the CSV.
  3. Set module width, height, and whether to show human-readable text.
  4. Batch-export PNG (for printing) or SVG (for vector archiving).
  5. Pair with label paper and use the label-printing feature to output directly.

The whole flow takes minutes — far faster than handwriting or screenshotting one by one. You can also open barcodegen.net to validate formats online.

Production caveats

  • Resolution: print at ≥300 DPI; PNG is fine for screens, prefer SVG for print.
  • Compliance: barcode height and narrow-bar width must meet the standard — too small and it won't scan.
  • Quiet zone: don't crop the side margins.
  • Data validity: let the tool compute EAN-13 / UPC-A check digits; don't type them. Internal codes (Code 128) can be self-defined but keep them consistent across your system.

Summary

Barcode generation isn't complicated — the trick is "pick the right format + produce in bulk + output compliant." For most non-engineering scenarios, a good free online barcode generator covers ~80% of needs; on the engineering side, integrate a library into your system for automation. The two combined are the most efficient.


What barcode approaches have you used, or what pitfalls did you hit? Share in the comments.

Top comments (0)