Biblio...RFID501(3pm)

πŸ’– NAME πŸ’–

Biblio::RFID::RFID501 β€” the RFID Standard for Libraries, bestie. Yes, that's a Perl module about library RFID tags, and yes, it's iconic. πŸŽ€


✨ DESCRIPTION ✨

Okay so this module is doing its absolute best to decode the tag format as described in this document:

RFID 501: RFID Standards for Libraries

http://solutions.3m.com/wps/portal/3M/en_US/3MLibrarySystems/Home/Resources/CaseStudiesAndWhitePapers/RFID501/

The goal β€” the dream, the vision, the main character energy β€” is to be compatible with the existing 3M Alphanumeric tag format which, as far as I know, isn't specified anywhere. Like, nowhere. Not a single place. πŸ’€ My own documentation about this format lives at:

http://saturn.ffzg.hr/rot13/index.cgi?hitchhikers_guide_to_rfid

πŸ¦‹ Data model πŸ¦‹

πŸ’œ 3M Alphanumeric tag

0   04 is 00 tt   i [4 bit] = number of item in set    [1 .. i .. s]
                  s [4 bit] = total items in set
                  tt [8 bit] = item type

1   dd dd dd dd   dd [16 bytes] = barcode data
2   dd dd dd dd
3   dd dd dd dd
4   dd dd dd dd

5   bb bl ll ll   b [12 bit] = branch [unsigned]
                  l [20 bit] = library [unsigned]

6   cc cc cc cc   c [32 bit] = custom signed integer

🌸 3M Manufacturing Blank

0   55 55 55 55
1   55 55 55 55
2   55 55 55 55
3   55 55 55 55
4   55 55 55 55
5   55 55 55 55
6   00 00 00 00

⭐ Generic blank

0   00 00 00 00
1   00 00 00 00
2   00 00 00 00

πŸ”’ Security πŸ”’

The AFI byte on the RFID tag is what handles security here, periodt.

In my case, we have an RFID door that can literally only read AFI bytes from the tag, and then it either issues an alarm sound or ignores it depending on the value of that byte. That's it. That's the whole security system. πŸ™ˆ

  • 0xD7 214 β€” secured item (door will beep) πŸ”₯
  • 0xDA 218 β€” unsecured (door will ignore it) 😌

πŸ‘‘ METHODS πŸ‘‘

πŸ’… to_hash

my $hash = Biblio::RFID::Decode::RFID501->to_hash( $bytes );

my $hash = Biblio::RFID::Decode::RFID501->to_hash( [ 'blk1', 'blk2', ... , 'blk7' ] );

🧚 from_hash

my $blocks = Biblio::RFID::Decode::RFID->from_hash({ content => "1301234567" });

πŸ“ blank_3m

🌈 blank

my $blocks = Biblio::RFID::Decode::RFID->blank;

And that's the whole page, bestie. Written up with perl v5.36.0, dated 2023-05-24 β€” no cap, that's the version and the date right there in the footer, and I'm folding it into this cute little sign-off instead of making you squint at a manpage footer. πŸ«Άβœ¨πŸ’–

πŸ“¦ where this page comes from