public sealed class
FiscalCode
{
private string _cf;
private static Hashtable
Odd;
private static Hashtable Even;
private static
Hashtable LastChar;
static FiscalCode()
{
Odd=new
Hashtable(26);
Even=new
Hashtable(26);
LastChar=new Hashtable(26);
Odd.Add('A',1);
Odd.Add('B',0);
Odd.Add('C',5);
Odd.Add('D',7);
Odd.Add('E',9);
Odd.Add('F',13);
Odd.Add('G',15);
Odd.Add('H',17);
Odd.Add('I',19);
Odd.Add('J',21);
Odd.Add('K',2);
Odd.Add('L',4);
Odd.Add('M',18);
Odd.Add('N',20);
Odd.Add('O',11);
Odd.Add('P',3);
Odd.Add('Q',6);
Odd.Add('R',8);
Odd.Add('S',12);
Odd.Add('T',14);
Odd.Add('U',16);
Odd.Add('V',10);
Odd.Add('W',22);
Odd.Add('X',25);
Odd.Add('Y',24);
Odd.Add('Z',23);
Odd.Add('0',1);
Odd.Add('1',0);
Odd.Add('2',5);
Odd.Add('3',7);
Odd.Add('4',9);
Odd.Add('5',13);
Odd.Add('6',15);
Odd.Add('7',17);
Odd.Add('8',19);
Odd.Add('9',21);
Even.Add('A',0);
Even.Add('B',1);
Even.Add('C',2);
Even.Add('D',3);
Even.Add('E',4);
Even.Add('F',5);
Even.Add('G',6);
Even.Add('H',7);
Even.Add('I',8);
Even.Add('J',9);
Even.Add('K',10);
Even.Add('L',11);
Even.Add('M',12);
Even.Add('N',13);
Even.Add('O',14);
Even.Add('P',15);
Even.Add('Q',16);
Even.Add('R',17);
Even.Add('S',18);
Even.Add('T',19);
Even.Add('U',20);
Even.Add('V',21);
Even.Add('W',22);
Even.Add('X',23);
Even.Add('Y',24);
Even.Add('Z',25);
Even.Add('0',0);
Even.Add('1',1);
Even.Add('2',2);
Even.Add('3',3);
Even.Add('4',4);
Even.Add('5',5);
Even.Add('6',6);
Even.Add('7',7);
Even.Add('8',8);
Even.Add('9',9);
LastChar.Add(0,'A');
LastChar.Add(1,'B');
LastChar.Add(2,'C');
LastChar.Add(3,'D');
LastChar.Add(4,'E');
LastChar.Add(5,'F');
LastChar.Add(6,'G');
LastChar.Add(7,'H');
LastChar.Add(8,'I');
LastChar.Add(9,'J');
LastChar.Add(10,'K');
LastChar.Add(11,'L');
LastChar.Add(12,'M');
LastChar.Add(13,'N');
LastChar.Add(14,'O');
LastChar.Add(15,'P');
LastChar.Add(16,'Q');
LastChar.Add(17,'R');
LastChar.Add(18,'S');
LastChar.Add(19,'T');
LastChar.Add(20,'U');
LastChar.Add(21,'V');
LastChar.Add(22,'W');
LastChar.Add(23,'X');
LastChar.Add(24,'Y');
LastChar.Add(25,'Z');
}
public FiscalCode(string
CF)
{
_cf=CF;
}
public bool
IsValid
{
get
{
if(_cf.Length!=16)
return
false;
int sum=0;
for(int
i=0;i<15;i++)
{
if(i%2==0)
sum+=(int)FiscalCode.Odd[_cf[i]];
else
sum+=(int)FiscalCode.Even[_cf[i]];
}
if((char)FiscalCode.LastChar[sum%26]==_cf[15])
return
true;
else
return
false;
}
}
}