Skip to content
FlashScan Pro

Code 128 vs EAN-13 vs UPC-A: how to choose the right barcode

EAN-13 for global retail, UPC-A for North America, Code 128 for internal logistics and SKUs: what each barcode encodes, and when to pick which.

Three formats, three jobs

Code 128, EAN-13, and UPC-A look alike — vertical bars and digits — but they answer different questions. EAN-13 and UPC-A answer “which product is this, for the checkout?”; Code 128 answers “which internal piece of information is this, for my own systems?” Choosing between them isn’t a matter of taste — it’s a matter of use case.

The decision rule fits in one question: who has to read the code, and where? A scan that stays within your walls follows your own convention; a scan that passes a checkout follows the GS1 standard. The table sorts the four formats the generator produces:

What each one encodes

Code 128 EAN-13 EAN-8 UPC-A
Content Letters, digits, symbols (ASCII) 13 digits 8 digits 12 digits
Length Variable Fixed Fixed Fixed
Check digit Yes (internal, invisible) Yes (13th digit) Yes Yes
Typical use Logistics, internal SKUs, traceability Global retail Small products North American retail
Registration Free — you decide GS1 GS1 GS1

The use case decides, not you

Selling in retail stores → EAN-13 (or UPC-A)

If the product will pass a checkout, the format is non-negotiable: point-of-sale systems expect a GS1 identifier. In Europe and most of the world that’s EAN-13; in the US and Canada, historically UPC-A. Both are GS1 formats — a UPC-A is an EAN-13 whose first digit is 0 — and modern registers read either. EAN-8 exists for very small packages (cosmetics, confectionery) where 13 digits won’t fit.

Labeling stock or internal logistics → Code 128

For your own labels — shelf references, batch numbers, picking slips, inventory — Code 128 is the right tool: it encodes alphanumeric characters (ABC-12345), not just digits, and the convention is yours to set. No registration, no license: you decide the scheme and generate.

Shipping to North America → check the target checkout

A product bound for the North American market traditionally carries a UPC-A; a globally sold product carries an EAN-13. In practice, GS1 assigns compatible prefixes and modern North American checkouts accept EAN-13 — the question is settled when the number is assigned, not when the graphic is drawn.

The nuance generators avoid

A generator produces the graphic — the bars — not the number. For internal use, no issue: your STOCK-A-042 Code 128 only needs to be recognized by your own scans. For retail, though, the EAN-13 number must be assigned by GS1 under a paid license: that’s what guarantees global uniqueness and acceptance by chains. Inventing a plausible-looking EAN to sell in stores leads to collisions or rejections. FlashScan Pro’s generator validates the digits you enter (12-13 for EAN-13, 11-12 for UPC-A, printable ASCII for Code 128) and computes the check digit — the GS1 license remains on your side. For internal stock, no GS1 step is required: you define the convention (AISLE-A-0123, LOT-2026-09…), generate the Code 128, and print.

A note on readers

Whatever you generate will be read by two very different families of devices: retail laser/imager scanners at checkouts, which expect strict GS1 formats, and phone decoders, which read almost everything — Code 128, EAN, UPC, QR. An internal label only ever meets the second family, which is why the Code 128 convention can stay entirely yours. A retail product meets the first, which is why its number can’t be improvised.

And the neighboring formats: EAN-8, Code 39, ITF

The barcode landscape extends beyond the main trio. Two neighbors are worth knowing:

  • EAN-8: the short version of EAN-13, reserved for very small packages (lipstick, gum, reduced labels) where thirteen digits won’t fit. Also GS1-assigned, and generatable in FlashScan Pro like the three main formats.
  • Code 39: the alphanumeric ancestor, still found in some industries and government systems. Less dense than Code 128 — it produces longer labels at equal content — it’s the format you replace when modernizing an internal system.
  • ITF-14: the shipping-carton format (codes printed directly on corrugated board). Outside the generator’s scope, but it’s what GS1 logistics uses for shipping units.

Generating the graphic

  1. Open the generator in Barcode mode.
  2. Pick the format: Code 128, EAN-13, EAN-8, or UPC-A.
  3. Enter the value — validation shows as you type; for EAN-13, 12 digits suffice, the check digit is computed.
  4. Download the PNG or SVG (vector is recommended for printed labels).

The EAN-13 anatomy — prefix, item reference, check-digit math — is in EAN-13: structure and check digit. And to verify your printed labels, the scanner reads 1D barcodes as well as QR codes.