When and how you should use barcodes as alternative for RFID

When you are adopting RFID technology as identification technology, the initial feeling is that all data capture processes should be done with RFID. Whereas this is a logical first response, this isn’t always the most effective way of working.

RFID is really strong in identifying a large number of items at high speed — without requiring a line of sight connection to the actual item. The technology is less suited to identify a single item, especially when the item is surrounded by other tagged items. In that case, a ‘traditional’ barcode is a much better identification technology: you can extremely reliable identify a single item, even it is only centimeters away from other items. Try that with RFID…

The technology is less suited to identify a single item, especially when the item is surrounded by other tagged items.

One might say that when using a barcode, you would loose data granularity. After all, people switch to RFID to use item-level identification instead of product-level identification. Luckily, there are some barcode standards that support item-level identification too! This allows you to choose the best identification technology for the use case, while still obtaining the same information.

Use cases

There are numerous use cases in retail applications where scanning single items are relevant, and where RFID is maybe not the best technology. The top-most ones are:

  • Point-of-sale. Scan an item at the point-of-sale to mark it as sold, using existing barcode reader infrastructure. The status of the item is updated for loss prevention and in-store refill.
  • Write-off. To mark the status of an item as ‘written off’.
  • Status check. Checking the status of a single item.

An additional benefit of not using RFID in those use cases, is that store employees can execute this on the fly using a mobile device with a camera — not requiring to get an RFID reader from the back. This comes in especially handy for mobile check-out applications.

Another related use case is the RFID quality check: you can quickly verify whether the encoding in the RFID tag matches the barcode on item-level.


The most familiar barcode is of course the EAN/UPC family of barcodes: present on almost all consumer items — but only supporting product-level identification. More granular identification is possible with one of the following barcodes:

  • GS1–128 barcode — Lineair
  • GS1 DataMatrix barcode — Two Dimensional
  • GS1 QR code — Two Dimensional
The identifier (01)012345678901234(21)123456 encoded in GS1–128, GS1 DataMatrix and GS1 QR code.

Each of the carriers has its advantages and disadvantages. GS1–128 can be read by existing lineair barcode scanners, but requires a significant amount of space. The both two-dimensional barcodes require less space, but need a compatible barcode scanner. The DataMatrix has been around for a longer time, and results in smaller codes for low quantities of data — compared to the QR code.

All barcodes can be scanned using the freely available app Scandit from the App Store. Download and see for yourself!

GS1 Identifiers

Now that we have seen the barcodes, we need to understand what data is put inside them. In the RFID label itself, we store the GTIN (which is directly derived from the EAN or UPC) and the serial number.

Let’s assume we work with GTIN 012345678901234 and Serial 123456. In the RFID label, this will be encoded as 3274257bf46072000000162e (hexadecimal representation — which can be verified here). While it seems logical to put the hexadecimal code directly into the barcodes; this is not how it should be. Life is complicated.

The barcodes should be encoded with a GS1 Element String. A GS1 Element String consists of a series of pairs of Application Identifiers (AI) and the value belong to this AI. Examples of the AI are for example the GTIN (“01”), the Serial value (“21”), or Production Date (“11”). A full list of Application Identifiers is available in the GS1 General Specification.

To put this together, the Application Identifier is put in between brackets, followed by the value. So for the example above, the resulting Element String is:


Should this then be put in the barcode? Uhhh, no. Sorry. It’s even more complicated.

Actually, the first character should be the non-printable ‘FNC1’ character, which is used to mark that the following information is a GS1 Element String. Also, the brackets around the AIs should be removed. This results in:

(and remember that the FNC1 should not be printed…)

Because this is a bit complicated and non-trivial, most barcode printing and generating applications do automatically deal with this: you can just put the GS1 Element String as input, and it will remove the brackets and add the FNC1 character. However, in most cases you then need to select ‘GS1 DataMatrix’ instead of a regular ‘DataMatrix’ barcode — otherwise you just get the GS1 Element String in the barcode. For example, visit this website where you can generate barcodes yourself.


To summarise, RFID is great — but not always the best choice of an identification technology. Especially when you want to identify a single item amongst others; or when there is no RFID reader around.

Luckily, you can still get item-level identification with barcodes, but you need to ensure that the barcode is encoded according to GS1 standards to allow interoperability between different vendors and systems.

Like what you read? Give Danny Haak a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.