One identifies a product to a till. The other carries the information itself. Retail is now slowly moving from the first to the second.
A traditional retail barcode is a product number and nothing else. The stripes on a cereal box encode twelve digits, and every price, name and stock level lives in a database that the number points at. Away from that database the barcode means nothing.
A QR code carries the information itself. It can hold up to 7,089 digits, or 4,296 alphanumeric characters, so the whole address, the whole contact card or the whole WiFi credential fits inside the pattern. No lookup, no database, no system to be connected to.
The distinction that actually matters is not one dimension versus two. It is a pointer versus a payload. A barcode refers to something. A QR code contains something.
The capacity gap is not incremental, it is three orders of magnitude, and it is why the two ended up used for completely different things.
| UPC-A barcode | QR code | |
|---|---|---|
| Shape | Stripes, read across one axis | Squares, read across two axes |
| Maximum data | 12 digits | 7,089 digits or 4,296 characters |
| Holds a web address | No | Yes |
| Damage tolerance | Check digit detects errors only | Reconstructs up to 30 per cent |
| Needs a database | Yes, to mean anything | No |
| Read by a plain phone camera | Usually needs an app | Yes, natively |
A UPC barcode has a check digit, which lets a scanner notice that a read was wrong. Noticing is all it can do. If a stripe is scratched, smeared or torn, the barcode cannot be recovered and the cashier types the number by hand.
A QR code uses Reed-Solomon error correction, which does not merely detect damage but rebuilds the missing data from redundancy deliberately spread across the pattern. There are four levels: roughly 7, 15, 25 and 30 per cent recoverable, named L, M, Q and H. At the highest level almost a third of the code can be destroyed and it still reads.
This is also the mechanism that makes a logo in the middle of a QR code work at all. The logo is damage. Error correction absorbs it, which is why raising the correction level is the standard advice when adding one, and why a logo that covers too much still breaks the code no matter what level you choose.
Given all of the above, the obvious question is why retail did not switch years ago. The answer is not technical conservatism, it is infrastructure, and the reasons are good ones.
That justification now exists, and the transition is formally under way. Under the GS1 Sunrise 2027 initiative, retail point-of-sale systems across more than forty countries are expected to be able to scan 2D codes, meaning GS1 DataMatrix and GS1 Digital Link QR codes, by the end of 2027. Walmart, Carrefour, Tesco and others have published roadmaps and are upgrading scanner hardware now.
The appeal is that one code on the pack can serve the till and the shopper at once. The same square can carry the product number for checkout plus a batch number, an expiry date and a link to allergen information, ingredients or recycling instructions. During the transition, packaging is expected to carry both marks, so the stripes are not disappearing soon.
A caveat worth stating plainly, because it is where this article could mislead you: a GS1 Digital Link QR code is not simply a QR code with your website in it. It encodes a licensed GTIN in a specified structure. A code from this generator, or any general-purpose one, will not work at a supermarket till. If you are packaging a product for retail, your starting point is GS1, not a free tool.
For almost everyone reading this, the question answers itself, but it is worth being explicit about the boundary.
A common misconception worth clearing up: a QR code is a barcode. It is a two-dimensional one. When people say "barcode" they usually mean the one-dimensional retail kind, and when they ask for "a barcode, not a QR code" they almost always mean a UPC or EAN for shop shelves, which is a GS1 matter rather than a design one.
Free, no sign-up, and your code never expires.
Got your code? ☕ Buy me a coffee — it keeps this tool free for everyone.