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;
   }
  }
 }