In a warehouse run on a WMS, the barcode is not a gadget. It is the basic way of identifying a product, a location, a pallet and a document. Without it the operator types data on a keyboard - and at eight hundred pallets a day a typo is statistically guaranteed. So the question is not "should we use barcodes", but "which symbology and how to print them so that they actually work". Below are a few decisions worth thinking through before ordering printers and scanners.
1D and 2D - what it means in practice
A 1D (linear) barcode encodes information in a single axis - bars and gaps of varying width. It is read by a laser or a CCD scanner, but you always have to hit it with the beam perpendicular to the bars. EAN-13 holds 13 digits, Code-128 in practice 30-40 characters, beyond that the code becomes physically too wide to fit on a typical label.
A 2D code (QR, DataMatrix, PDF417) encodes data in two axes. It fits a few hundred bytes into the area of a postage stamp and includes Reed-Solomon error correction - it reads even when partially damaged. It is read by a camera, so any smartphone or imaging terminal will do. That changes the economics of an implementation: you no longer need a dedicated laser scanner at every workstation.
EAN and UPC - retail
EAN-13 (UPC-A in the US) is the standard on consumer-unit packaging. 12 data digits plus 1 check digit (modulo 10). The first three digits are the GS1 prefix - 590 for Poland, 400-440 for Germany, 0-1 for the US. Then comes the company identifier and the product number.
From a WMS perspective EAN-13 identifies the product fine, but it has one fundamental limitation: it does not carry batch number, expiry date or serial. If you manage goods with shelf life or you need to trace a specific lot for a recall, EAN alone is not enough. That is when you reach for GS1-128 or for a QR code with Application Identifiers.
GS1-128 - the logistics code
GS1-128 (formerly EAN-128) is plain Code-128 underneath, but with a strictly defined data structure. Every fragment is preceded by an AI - Application Identifier - a two-, three- or four-character prefix that says what comes next. (01) is the GTIN, (10) is the batch number, (17) is the expiry date in YYMMDD, (21) is the serial, (00) is the SSCC of the pallet.
A string like (01)05901234123457(10)A5478X(17)260930 tells the system: "product with GTIN 05901234123457, batch A5478X, valid until September 30, 2026". One scan and the WMS has the full set of data needed for the receipt document - no manual typing from the paper delivery note.
In Weaver WMS GS1-128 is supported natively - we split the individual AIs and write them into the right fields of the document. The operator scans, the system fills in batch, date and quantity, done.
SSCC - identifying a pallet
SSCC (Serial Shipping Container Code) is an 18-digit unique number for a pallet or a bulk unit. It is printed on a GS1 logistic label together with other data - the GTIN of the contents, quantity, expiry date. You scan the SSCC and the system immediately knows what is on the pallet - no need to break it down and check individual cartons.
SSCC becomes mandatory the moment you work with large retail chains - they require GS1 labels with a valid SSCC and reject pallets that don't have them or have them wrong. The same applies to cross-docking, ASN and any operation in which a pallet changes ownership without a physical content check.
QR - when it makes sense, when it doesn't
QR holds a lot of data (up to about 3000 numeric characters or 1800 alphanumeric) and has up to 30% error correction. That means even a torn or dirty code still reads. It is independent of orientation - it scans from any angle.
In the warehouse QR works well where:
- you want to fit more than EAN/Code-128 (a URL to a document, batch, serial, logistics data in a single code)
- the operator scans with a smartphone or a camera-based terminal - cheaper and more flexible than a 1D laser
- the code can wear out or get dirty (labels on raised locations, dusty zones)
On the other hand it makes no sense replacing EAN on retail packaging - EAN stays the standard there because every checkout in the world reads it. QR comes in only where checkouts have imaging scanners and accept codes from a phone (Decathlon, some self-checkouts).
DataMatrix - small and underrated
DataMatrix does roughly the same as QR but can be much smaller - readable from an area as small as 2x2 mm. That is why it is the standard in pharma (single-blister marking - the FMD directive requires DataMatrix), in electronics (IC marking) and in industry (DPM, Direct Part Marking - laser engraving on metal parts).
In a typical WMS you see it less often than QR, but in specific industries (pharma, electronics, tooling, aerospace) it is the only sensible option. Any modern 2D imager reads it; no 1D laser scanner will.
Printing - where theory ends
The most common reason "the codes don't work" is not the code itself but the way it was printed. Four things customers usually trip on:
- Printer resolution. On a 203 dpi thermal-transfer printer the narrowest bar in EAN-13 is 0.33 mm. That is the floor. Trying to fit Code-128 with 25 characters on a small label produces bars below that threshold - a laser will not read them. For 2D on a small surface you need 300 dpi.
- Paper and ribbon. Direct thermal paper fades under UV in a few weeks. Labels for outer packaging should be thermal-transfer with a resin ribbon. Direct thermal we keep for internal documents and short-term use.
- Quiet zone. Margin around the code. For EAN the minimum is seven modules (about 2.3 mm) on the left and the right. Without it the scanner will not pick up the start and stop sequences - the code is physically there, but "doesn't work".
- Contrast. The code has to be black on white. Printing in gold, silver or on coloured stock often produces codes that look fine to the eye but the scanner does not recognise.
The standard test is a verifier (REA, Axicon) - it grades the print A-F per ISO 15416. Retail chains require at least grade C, some require B. Without a verifier, the first print run is a lottery.
Scanners - a short market map
From a 2026 implementation perspective things look roughly like this:
- Laser 1D scanner - from around EUR 70, fast on EAN and Code-128, will not read 2D. If the whole warehouse uses only 1D - it's enough.
- CCD/imager 2D scanner - reads 1D and 2D, reads off a screen (a code from a customer app), works at an angle. EUR 150-350. Standard in new implementations.
- Mobile Android terminal - built-in scanner, screen, keyboard, WMS connectivity. EUR 600-1500 per unit. Honeywell, Zebra, Datalogic, Newland are the standards.
- Smartphone - for small operations or for a supervisor. A 12 Mpix camera reads any QR and most 1D codes. Durability is another matter - one drop on a concrete floor and it's done.
Generating codes
For printing single labels, for tests and for prototypes a free online generator is enough. We recommend the HDWR barcode and QR generator - it supports all the popular symbologies (EAN-13, Code-128, GS1-128, QR, DataMatrix, PDF417), lets you choose the size and check what the code will look like before printing.
For serial label production you need dedicated software (BarTender, NiceLabel) or - if you implement a WMS - label generation directly from the system. Weaver WMS prints SSCC, GS1-128 and QR labels straight from receipt, dispatch and transfer documents, on Zebra, Honeywell and TSC thermal-transfer printers. The operator does not have to switch between applications - one click on "print labels" and the labels come out in the right format.
Common mistakes in implementations
- No print validation. A misadjusted printer spits out 300 labels and they only turn out unreadable at loading time. The first label of every batch should be verified with a scanner.
- Location labels on thin paper. After half a year they are wrinkled, greasy, partly worn off. Locations are a long-term asset - the labels should be laminated or printed on resin-coated stock.
- Counting on "the scanner will read it anyway". Quiet zone, contrast, resolution are not symbolic. Skip them and a large share of scans fails, the operator types manually, which means errors.
- EAN where GS1-128 is needed. Strongly visible in industries with batches and expiry dates. The scanner reads the EAN, but the system has no idea which batch was received. A month later stock balances are fine, but there is no way to locate a specific batch for a complaint.
Summary
Choosing a code in a WMS is not a one-off technical decision. Retail = EAN. Pallet logistics = SSCC plus GS1-128. Rack locations = Code-128 or QR (if you go for durability). Internal documents, receipts, helper labels = QR, because it's cheap to generate and tolerates dirt.
The choice of symbology is usually one of the first things we settle with the customer in the pre-implementation analysis. Often it turns out you have to use two or three at the same time - and that is normal. What matters is that the decision is conscious and not the result of "the printer happened to be set that way".