--- /dev/null
+package Biblio::RFID::SmartX;
+
+use warnings;
+use strict;
+
+use Data::Dump qw(dump);
+
+=head1 NAME
+
+Biblio::RFID::SmartX - Croatian student cards format
+
+=back
+
+
+=head1 METHODS
+
+=head2 to_hash
+
+ my $hash = Biblio::RFID::Decode::SmartX->to_hash( [ 'sector1', 'sector2', ... , 'sector7' ] );
+
+=cut
+
+sub bcd {
+ my $data = shift;
+ return join('', map { sprintf("%02x",ord($_)) } split (//, $data));
+}
+
+sub to_hash {
+ my ( $self, $data ) = @_;
+
+ return unless $data;
+
+ die "expecting array of sectors" unless ref $data eq 'ARRAY';
+
+ my $decoded;
+ foreach ( 4 .. 6 ) {
+ warn "# $_: ",
+ $decoded->[$_] = bcd( $data->[$_] );
+ }
+
+ my $hash;
+ $hash->{SXID} = substr( $decoded->[4], 0, 20 );
+ $hash->{JMBAG} = substr( $decoded->[4], 22, 10 );
+ $hash->{OIB} = substr( $decoded->[5], 16, 11 );
+ $hash->{SPOL} = substr( $data->[5], 14, 1 ); # char, not BCD!
+ $hash->{INST_ID} = substr( $decoded->[6], 0, 12 );
+ $hash->{CARD_V} = substr( $decoded->[6], 12, 4 );
+
+ warn "## hash = ",dump($hash);
+
+ return $hash;
+
+}
+
+1;
--- /dev/null
+#!/usr/bin/perl
+
+use Test::More tests => 2;
+use Data::Dump qw(dump);
+
+use lib 'lib';
+
+BEGIN {
+ use_ok( 'Biblio::RFID::SmartX' );
+}
+
+my $tags =
+[ [
+ "\xde\xad\xbe\xbe\xfc\x38\x02\x00\x00\x00\x00\x00\x21\x07\x44\x00",
+ "\x00\x01\x1d\x58\x1e\x58\x1f\x58\x29\x58\x00\x00\x00\x00\x00\x00",
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
+ undef,
+ "\x99\x88\x77\x66\x55\x44\x33\x22\x11\x00\x00\x12\x22\x22\x22\x21",
+ "\x32\x30\x31\x33\x34\x35\x36\x31\x91\x11\x11\x11\x11\x90\x6d\x00",
+ "\x33\x33\x33\x00\x00\x00\x00\x06\x00\x30\x32\x53\x52\x43\x45\x04",
+],[
+ "\x01\x02\x03\x04\xdc\x38\x02\x00\x00\x00\x00\x00\x21\x07\x44\x00",
+ "\x00\x01\x1d\x58\x1e\x58\x1f\x58\x29\x58\x00\x00\x00\x00\x00\x00",
+ "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00",
+ undef,
+ "\x00\x11\x22\x33\x44\x55\x66\x77\x88\x99\x00\x21\x11\x11\x11\x12",
+ "\x32\x30\x31\x34\x31\x30\x30\x31\x81\x11\x11\x11\x11\x80\x66\x00",
+ "\x32\x32\x32\x00\x00\x00\x00\x05\x00\x30\x32\x53\x52\x43\x45\x04",
+] ];
+
+foreach my $tag ( @$tags ) {
+
+ ok( $hash = Biblio::RFID::SmartX->to_hash( $tag ), 'to_hash' );
+ diag dump $hash;
+
+}
+