September 22, 2024
I’ve been thinking a lot lately about how clunky most identification systems are, especially when it comes to human readability and memorization. Take the Social Security Number (SSN) in the US or the National Insurance (NI) number in the UK—they’re not exactly user-friendly. They’re prone to transcription errors, lack built-in error detection, and are just a pain to work with.
This got me wondering: Can we create an ID system that’s both high-capacity and genuinely user-friendly? One that you could scribble on a napkin without worrying about mixing up an ‘O’ and a ‘0’ or an ‘I’ and a ‘1’? That’s how Tag33 came into existence.
The goal was to design an ID system tailored for human use—easy to read, write, and even memorize. To achieve this, I focused on a few key principles:
First off, I needed a character set that’s larger than just digits but still easy to distinguish. I settled on a base-33 alphanumeric scheme using the following characters:
123456789ABCDEFGHJKLMNPQRSTUVWXYZ
Notice that I’ve deliberately left out characters like ‘0’ (zero), ‘O’ (the letter), ‘I’, and ‘S’ to minimize confusion. This set strikes a balance between capacity and readability.
Each Tag33 ID consists of:
This makes for a 14-character ID in total. With 33 options for each of the 12 positions, we get 33¹² (about 1.67 × 10²³) unique combinations—plenty for just about any application.
Here’s what some Tag33 IDs look like:
9WCLWL7X2HQH7N
A3YPS9T1EQN872
KKERRF16E42D5S
KPQGGDQWZLUJ91
For better readability, you can break them into chunks:
1MEB 1CK2 QP4G 59
That’s three blocks of four characters, followed by a two-character checksum.
The checksum is there to catch errors if someone mistypes or miswrites the ID. Here’s how it’s calculated:
This way, if there’s a mistake in any of the first 12 characters, the checksum likely won’t match, and the error can be flagged immediately.
Most existing ID systems weren’t designed with human factors in mind:
For example, the SSN is just nine digits without a checksum, making it both error-prone and insufficient for a growing population. The UK’s NI number mixes letters and numbers but doesn’t avoid confusable characters.
One of my benchmarks for Tag33 was the “napkin test”—could someone easily write down their ID on a napkin without messing it up? With its carefully chosen character set and built-in checksum, Tag33 passes this test:
Tag33 isn’t just theoretical; it has practical applications:
Designing Tag33 was an interesting exercise in balancing human usability with technical requirements. It’s not perfect, but I believe it addresses some of the key shortcomings of existing ID systems. Plus, it’s kind of neat to think that an ID system could be both highly scalable and something you could comfortably jot down on a napkin.
You can download Tag33 as an npm package or check out the repo on GitHub.
If you have any thoughts or suggestions, I’d love to hear them!