Selecting a numbering/encoding system for your RFID Project
RAIN RFID Tags are being created at the rate of 20 billion tags per year (in 2020). The standards around encoding tags were never clearly published, and several methods are employed.
So, what 'numbers' should I be putting into my tags? ASCII? UPCs? SKUs?
The short answer
-
If you are creating UPC Barcodes in retail: Consider a GS1 Company Prefix (GCP) and use the SGTIN-96 encoding from GS1 (gs1.com).
-
Everyone else: Get a RAIN CIN and start encoding.
-
Whatever you do, please don't "make a new standard." But, we will tell you how to successfully go-rogue if you choose to.
The longer answer
Tag encoding for RFID tags fall under two published standards sets and a de facto: GS1, ISO, and 'rogue.' GS1 handles the legacy retail barcode (UPC) world and has a comprehensive list of tag encoding schemes covering hundreds of pages of specifications... ISO handles organizational cooperation (like baggage handling, automotive, and tolls) and provides a safe-place for closed-loop systems to build ecosystems of tags -- like the RAIN CIN -- with little concern of rogue tag collisions/clutter and acid rain. The third area is 'rogue,' and a large number of tags follow a predictable encoding that leads to the collapse of the value of RFID and a 'full reset' (rogue-like) re-implementation of your RFID encoding plan.
This guide will help you select a standard and implores you to please not pick a rogue-like plan.
Number Standards: Rogue
Let's first address the de facto standard: Rogue. Those new to RFID will often elect to encode tags like this:
- A 12-digit asset ID turned into ASCII characters and stored into the tag.
- A number starting with 1 or 1,000,000 and incremented for each tag used.
- An 'SKU' and 'serial' combo stored into the tag ID
Each of these options will eventually lead to issues in your RFID system or someone else's. Since you can not easily differentiate your tags from other tags, your system will see many 'rogue' tags in your data feed. You will need to determine how to process them or make incorrect decisions about your inventory counts. There are solutions in both the GS1 and ISO to prevent this, but it is a common first step. I suggest you skip this step in your road to RFID.
Number Standards: GS1
GS1 is a standards body that offers an array of options for tag encoding. If you are in retail and use 1970's UPC barcodes in your day-to-day, their 'SGTIN-96' RFID standard is highly relevant and recommended as your next step in tag encoding.
Important: GS1 SGTIN tags (arguably the most common RFID encoding found) start with '30.' That prefix is also the ASCII equivalent of '0.' If you are making a rogue-encoding of ASCII characters, how would you left-fill your numbers? Likely, '0000000001234' - i.e., precisely into the middle of the most commonly used RFID prefix on the planet.
The GS1 numbering space is the default playground of rogue number implementations. We only recommend the GS1 SGTIN-96 and DoD-96 standards if you need them as part of your partner RFID ecosystem. The other GS1 schemas don't set an AFI (Application Family Identifier) on tags making them inherently difficult to sort valid data from rogue data. We hope GS1 will adopt an AFI and increase the value of their numbering schemas.
Note: GS1 publishes the DoD RFID Tag Specification (DoD-96)] that SimplyRFiD encodes to extensively for military suppliers. It's a free numbering space for unique tag identification but suffers from existing in the rogue playground. You'll know if you need it.
Numbering Standards: ISO
ASCII, numbers, or a SKU+Serial combo? ISO recently ratified the RAIN CIN standard. This standard allows you to reserve a prefix and use any tag-numbering format you choose after your company identification number (CIN). We highly recommend you look at the RAIN CIN and consider this for a simple way to have a unique number space.
The issue with most other ISO encoding specifications: They sit behind a paywall. Before you can see if it's a fit for you, you need to buy a $50-$500 document. If you need an ISO encoding, it will likely come as a trading-partner mandate, and your path will be clear. There is great value in the work of the ISO organization. The RAIN CIN is an easily accessible and nominal cost schema to implement.
What to put in your RFID tag data / number
The reality of RFID is: You will need to support many formats and read every tag in-view and decide its value. There are proponents that will suggest you can set filters and reduce 'clutter' by filtering the RFID tag data.
This pre-filter could potentially assist in de-cluttering if all companies adopted RAIN CIN or an AFI (application family identifier) and moved their default tag structures out of the rogue tagname space (where GS1 is). But, it's not the case today so if you plan to deploy a system in the next five years, you're going to read everything in-view of your RFID system.
When you setup your system consider this
1. 96-Bits
We don't recommend anything but 96-bit RFID tags (as of 2022). Perhaps 128-bit in a few years. But, a well considered system will work well in 96-bits and perform optimally.
2. 96-bits = 24 hex or 12 alpha characters of data
For those bits you will lose about 8 Hex (RAIN CIN) or 4 of your alpha characters to provide a numbering prefix. You can apply for a shorter RAIN CIN (2, 4, or 6 length hexadecimal prefix), if you can show your application requires the additional capacity.
So, for working space, you will have 16 Hex characters or 8 Alpha characters.
Hex numbers represent 0-16 values (0-9, A-F). You can combine them to create bigger numbers.
Samples
Here are a few example layouts you can make for your numbering system.
Lots of products, with large numbers of each
HEX | Description |
---|---|
12345678 | 8-digit RAIN CIN Prefix numbers |
FFFFFF | Your SKU/Product Name/UPC. This gives you more than 16 million product names/ID's. |
FFFFFFFFFF | About 1 trillion serial numbers for each of your 16 million products. |
Many products with manufacturing lot numbers and manufacturing plant, large numbers of each
HEX | Description |
---|---|
12345678 | Your 8-digit RAIN CIN Prefix numbers |
FFFF | Your SKU/Product Name/UPC. This gives you more than 65,000 product names/ID's. |
FFFF | Manufactured date (in days since January 1, 2020 will give you 100 years of days |
FF | Manufactured Plant (up to 255 plants) |
FFFFFF | Up to 16,000,000 units per-day, per-plant |
A ski pass, participant, or user tag
HEX | Description |
---|---|
12345678 | Your 8-digit RAIN CIN Prefix numbers |
FFFFFFFF | Ticket Number (Up to 4 billion unique tickets) |
FFFF | Valid From Date (in days since January 1, 2020 will give you 100 years of days |
FF | Number of days or hours valid (Could be 255 hours or 255 days) |
FF | Pass Level (up to 255 levels) |
In this scenario, a ticket number is issued. It has a starting date, how long it's valid, and where it's permitted to go. This allows an edge reader to scan the tag and determine if a user is authorized without checking the backend for ticket validty. The advantage is: Remote readers won't require internet access to validate a ticket.
Caution: Not for authentication
RAIN RFID is not a security system. The tag numbers are easily tampered. There are several companies working on higher-security tags but as of 2022, there aren't any truly exceptional strategies for allowing a high-value authorization in an RFID Tag. We recommend you use RFID for inventory/asset tracking. And, 'access control' but not for authentication.
Setting up your encoding
A few encoding examples:
RAIN CIN
tBit | AFI | Prefix (8 Hex) | Encoding (16 Hex) |
---|---|---|---|
1 | 0xAE | 12345678 <- Your CIN | 1234567890123456 |
SGTIN-96
tBit | AFI | Prefix (SGTIN) | Data |
---|---|---|---|
0 | 0x00 | 30 | GCP/UPC combo w/ Serial |
DoD-96
tBit | AFI | Prefix (DoD) | Container | CAGE Code | Serial |
---|---|---|---|---|---|
0 | 0x00 | 2F | 0/1/2 | 1234567890 | 12345678901 |
Rogue - ASCII
Note: This falls directly into the GS1 SGTIN, so consider a rogue-2 implementation.
tBit | AFI | (ASCII) | Hex |
---|---|---|---|
0 | 0x00 | 000000000001 | 303030303030303030303031 |
Rogue2-Sneaky - ASCII
Avoids GS1's area:
tBit | AFI | (ASCII) | Hex |
---|---|---|---|
1 | 0xFF | 000000000001 | 303030303030303030303031 |
Application Family:
tBit and AFI
These will be set based on your tag encoding standard. If your entire ecosystem agrees on an AFI (e.g. RAIN CIN, or Rogue), you will significantly decrease tag clutter and increase your tag read speed. However, you will likely have rogue/GS1/ISO tags in your data feed and will need to read and parse all tags.
Example: tBit=1, AFI=0xAE (RAIN CIN)
Tag Prefix
Within your AFI, you may be assigned a tag prefix that identifies your tags. If you are using a RAIN CIN, you this is either 2, 4, 6, or 8 hex digits.
Example: 80808080
Your Data
- At a minimum you will want to have an SKU/UPC/EPC/EAN/Product ID.
- A serial number within that product code
Example: 1234567890123456
Final UII (Unique Item Identifier)
Sometimes this is called EPC. EPC Global coined the term EPC when referring to their codes. It's functionally the equivalent of the UII in the 96-bit RAIN RFID tag world:
Example 96-bit UII: 808080801234567890123456 <-- complete 'package' you'll receive of data when you read your tag.
So, you want to go-rogue?
If you read this far and want to know how to make a numbering system that will be super-likely all-by-itself and don't want to join a numbering system, here's how.
Use the AFI and tBit
The AFI is the 'application family identifier' on an RFID tag. The default value on an RFID Tag is 00. GS1 sits in 00, making that the most cluttered of all spaces.
If you set the AFI to FF and the tBit to 1, you will likely be in an area that no one will visit for 50 years -- a career lifetime. ISO doesn't have FF identified in any future, and they appear to be going sequentially higher. ISO is still around A0 (hexadecimal). Since ISO takes years to create new standards, you'll indeed be long gone before anyone curses your decision to go rogue.