This post is a redux from a now-deleted social media thread. It felt too important to let bit rot.
If you’re a Millennial of a certain age, or perhaps a Baby Boomer who raised Millennials,1 you might remember the 2001 toy Skannerz by Radica. It was a gotta-catch-em-all game that involved scanning real-world barcodes to collect monsters and objects, and to battle other Skannerz. It was a hand-held gadget toy back when consumer electronics were still weird and fun and we had more products than just iPhone. I had a blue one. It looked like this:
The toy/game had an A+ premise: alien monsters transported down to earth and decided to hide inside of the barcodes on products all around your home (or, more annoyingly to your parents, all around the grocery store). Your job was to scan every barcode you could get your hands on, fight and capture the alien monsters, and then fight the monsters your friends collected. And to make the weirdest Pokémon ripoff complete: the Skannerz came in three colors — red, blue, and green — that could only collect monsters of their associated “tribes”. This really good commercial explains:
Because I was already a major dork at 11 years old, I was intrigued by how the device worked. How did it go from barcode to monster? There was no way it was talking to a server (although I did imagine the world’s greatest PHPMyAdmin at the time). I guessed that it had every possible barcode referenced internally. But that’s not quite correct. It was a little more clever than that.
But frirst, a quick primer on barcodes. There are many variations; this is a UPC Version A — very common in the United States. It has a basic specification: that first digit way to the left is the product type (sometimes called a number system). The next five digits identify the manufacturer. The next five identify the product. And at the end is a checksum digit. The details of how to implement the spec aren’t all too important for our Skannerz exploration.
Okay, back to the Skannerz game. As mentioned above, there were 3 different “tribes”, identified by which color scanning device you had. And there were 126 total monsters. So each tribe could capture 42 monsters. If you wanted to catch ’em all you needed to buy all three. Business!
You could also collect non-monster items from barcodes. And some barcodes healed your injured monsters. Again, these toys had no wireless communication (it was 2001!) so all of the logic for item or monster identification was baked right into the device. But how?
The Skannerz patent is conveniently revealing!2 The device only cares about the “product” section (denoted below as 1315). If the first digit is 0-5, you’ve scanned a monster. 6-9, you’ve scanned an item. Digits 3, 4, and 5 identify the item/monster.
If the first digit in the barcode’s product code is 0 - 5, we’re in Monster Mode.
We’ve got 1000 possible values (000-999 across digits 3, 4, and 5 in our product code) to identify 126 monsters. The patent goes on to explain how the magic of division solves this problem:
\[ \frac{1000}{126} = 7.94 \]
And there was much rejoicing.
The range of numbers from 000 to 007 correspond to the first monster in Tribe 1, 008 to 015 correspond to the first monster in Tribe 2, and so on.
The patent then goes on to address the fact that 126 doesn’t divide well into 1000, and that 7.94 is not an integer. We only follow this eight-stepping until we get through the 124th monster, and then:
Because 1,000 is not a multiple of 126, the last 2 monsters each have a range of 4 numbers. In other words, the last monster in Tribe 2 would correspond to the range of numbers 992 through 995 and the last monster in Tribe 3 would correspond to the range of numbers 996 through 999.
Now, if the first digit in the barcode’s produt code is 6 - 9, we’re in Item Mode.
Similarly, there were 24 items in the game + 1 for healing. So 25 items. Again, we’ve got 1000 values to work with:
\[ \frac{1000}{25} = 40 \]
So a range of 40 numbers can be used to define each item. Item 1 corresponds to the range of numbers from 000 through 039, Item 2 corresponds to the range of numbers from 040 through 079, and so on. And great news: 40 is an integer.
Quick aside: the UPC Version A codec above is the the only format outlined in the Skannerz patent. But the patent also burries this little nugget:
Many other encoding techniques are within the scope of the present invention. In some such embodiments, Global Location Number (“GLN’) codes and similar codes used, e.g. for identifying parcels, are assigned secondary meanings which correspond with elements of a game. In still other embodiments, codes used for entirely different purposes, for example, audio or video data compression, data encryption, etc., are assigned secondary meanings which correspond with elements of a game.
What does that mean? It literally says nothing else about what invention is being claimed there, but good on the Radica lawyers for planting a flag I guess? Maybe the Skannerz Commander, which I never had, rolled its own encryption algorithm?
But that’s really it! If you knew this encoding scheme, and had access to a printer, you could collect all the monsters and items pretty quickly. Anyone else remember Barcode Mill? Of course people knew; there were unofficial barcode books you could buy to help you complete your collection. But where’s the fun in that?
Thanks for indulging my dork nostalgia. I look forward to the Greta Gerwig adaptation.