Short answer: use EAN-13/UPC-A for retail products, Code 128 for shipping labels and internal SKUs, Code 39 only for legacy healthcare / defense, and QR for anything URL-shaped or consumer-scanned. Zro7 Barcode Generator supports them all and renders locally.
The decision table
- EAN-13 / UPC-A — 12–13 digits, fixed length, required for retail POS. Get numbers from GS1.
- Code 128 — full ASCII, variable length, denser than Code 39. The default for shipping.
- Code 39 — uppercase + digits + a few symbols. Legacy but still required by some healthcare and defense workflows.
- ITF-14 — 14 digits for shipping cartons of retail goods (case pack).
- QR — up to ~3 KB of any data, 2D, scans from a phone camera. Great for URLs, WiFi, vCards.
- Data Matrix — 2D like QR but denser at small sizes; standard on pharma packaging (GS1 DataMatrix).
1D vs 2D — the real trade-off
1D barcodes (EAN, Code 128) are read by cheap laser scanners and can be printed narrow. 2D codes (QR, Data Matrix) need a camera-style scanner but hold 10–100× more data in the same footprint. Choose based on what will read it, not aesthetics.
Common mistakes
- Using QR on a retail product — POS scanners can't read QR at speed.
- Using Code 128 with special characters in a URL — those characters print but confuse many scanners; use QR.
- Skipping the quiet zone — the white margin around a barcode is not optional; scanners need it.
Steps
- Open Barcode Generator.
- Pick the format from the dropdown (Zro7 validates the payload for each).
- Preview at print size — anything under 0.8× the recommended module width will fail.
- Export SVG for print, PNG for on-screen.
Zro7