io uso questo:

codice:
<%
	FUNCTION CF_caratteri(cod_f)
		Dim carattere
		CF_caratteri = False
		For carattere = 1 to Len(cod_f)
			If NOT IsNumeric( Mid(cod_f, carattere , 1) ) AND (Asc( Mid(cod_f, carattere , 1) ) < 65 OR Asc( Mid(cod_f, carattere , 1) ) > 90) Then
				CF_caratteri = True
			End If
		Next
	END FUNCTION
	


	FUNCTION Ctrl_codicefiscale(cf)
	CodiceFiscale = Trim(UCASE(cf))

	If CF_caratteri(CodiceFiscale) Then
		Ctrl_codicefiscale = False
	Else		
		Dim Lettere(35,2) 
		
		Dim ConfrontoCarattereControllo(25) 
		
		Dim I 
		Dim J 
		
		Dim Carattere 
		Dim ValorePari 
		Dim ValoreDispari 
		Dim SommaCaratteri 
		Dim PariDispari 
		Dim Risultato 
		
		Dim CarattereControllo 
		Dim Temp 
		Dim Test 
		
		Lettere(0,0) = "A" 
		Lettere(0,1) = "0" 
		Lettere(0,2) = "1" 
		
		Lettere(1,0) = "B" 
		Lettere(1,1) = "1" 
		Lettere(1,2) = "0" 
		
		Lettere(2,0) = "C" 
		Lettere(2,1) = "2" 
		Lettere(2,2) = "5" 
		
		Lettere(3,0) = "D" 
		Lettere(3,1) = "3" 
		Lettere(3,2) = "7" 
		
		Lettere(4,0) = "E" 
		Lettere(4,1) = "4" 
		Lettere(4,2) = "9" 
		
		Lettere(5,0) = "F" 
		Lettere(5,1) = "5" 
		Lettere(5,2) = "13" 
		
		Lettere(6,0) = "G" 
		Lettere(6,1) = "6" 
		Lettere(6,2) = "15" 
		
		Lettere(7,0) = "H" 
		Lettere(7,1) = "7" 
		Lettere(7,2) = "17" 
		
		Lettere(8,0) = "I" 
		Lettere(8,1) = "8" 
		Lettere(8,2) = "19" 
		
		Lettere(9,0) = "J" 
		Lettere(9,1) = "9" 
		Lettere(9,2) = "21" 
		
		Lettere(10,0) = "K" 
		Lettere(10,1) = "10" 
		Lettere(10,2) = "2" 
		
		Lettere(11,0) = "L" 
		Lettere(11,1) = "11" 
		Lettere(11,2) = "4" 
		
		Lettere(12,0) = "M" 
		Lettere(12,1) = "12" 
		Lettere(12,2) = "18" 
		
		Lettere(13,0) = "N" 
		Lettere(13,1) = "13" 
		Lettere(13,2) = "20" 
		
		Lettere(14,0) = "O" 
		Lettere(14,1) = "14" 
		Lettere(14,2) = "11" 
		
		Lettere(15,0) = "P" 
		Lettere(15,1) = "15" 
		Lettere(15,2) = "3" 
		
		Lettere(16,0) = "Q" 
		Lettere(16,1) = "16" 
		Lettere(16,2) = "6" 
		
		Lettere(17,0) = "R" 
		Lettere(17,1) = "17" 
		Lettere(17,2) = "8" 
		
		Lettere(18,0) = "S" 
		Lettere(18,1) = "18" 
		Lettere(18,2) = "12" 
		
		Lettere(19,0) = "T" 
		Lettere(19,1) = "19" 
		Lettere(19,2) = "14" 
		
		Lettere(20,0) = "U" 
		Lettere(20,1) = "20" 
		Lettere(20,2) = "16" 
		
		Lettere(21,0) = "V" 
		Lettere(21,1) = "21" 
		Lettere(21,2) = "10" 
		
		Lettere(22,0) = "W" 
		Lettere(22,1) = "22" 
		Lettere(22,2) = "22" 
		
		Lettere(23,0) = "X" 
		Lettere(23,1) = "23" 
		Lettere(23,2) = "25" 
		
		Lettere(24,0) = "Y" 
		Lettere(24,1) = "24" 
		Lettere(24,2) = "24" 
		
		Lettere(25,0) = "Z" 
		Lettere(25,1) = "25" 
		Lettere(25,2) = "23" 
		
		Lettere(26,0) = "0" 
		Lettere(26,1) = "0" 
		Lettere(26,2) = "1" 
		
		Lettere(27,0) = "1" 
		Lettere(27,1) = "1" 
		Lettere(27,2) = "0" 
		
		Lettere(28,0) = "2" 
		Lettere(28,1) = "2" 
		Lettere(28,2) = "5" 
		
		Lettere(29,0) = "3" 
		Lettere(29,1) = "3" 
		Lettere(29,2) = "7" 
		
		Lettere(30,0) = "4" 
		Lettere(30,1) = "4" 
		Lettere(30,2) = "9" 
		
		Lettere(31,0) = "5" 
		Lettere(31,1) = "5" 
		Lettere(31,2) = "13" 
		
		Lettere(32,0) = "6" 
		Lettere(32,1) = "6" 
		Lettere(32,2) = "15" 
		
		Lettere(33,0) = "7" 
		Lettere(33,1) = "7" 
		Lettere(33,2) = "17" 
		
		Lettere(34,0) = "8" 
		Lettere(34,1) = "8" 
		Lettere(34,2) = "19" 
		
		Lettere(35,0) = "9" 
		Lettere(35,1) = "9" 
		Lettere(35,2) = "21" 
		
		For I = 0 To 25 
		
		     ConfrontoCarattereControllo(I) = Chr(65 + I) 'creo in ConfrontoCarattereControllo tutte le lettere maiuscole dalla A (chr(65)) alla Z(chr(90)) 
		
		Next 
		
		Carattere=0 
		ValorePari=1 'indice della seconda colonna della matrice Lettere 
		ValoreDispari=2 'indice della terza colonna della matrice Lettere 
		SommaCaratteri=0 
		
		CarattereControllo=Right(CodiceFiscale,1) 
		
		for I=1 to len(CodiceFiscale)-1 
		   if (I mod 2)=0 then 
		     PariDispari="P" 
		   else 
		     PariDispari="D" 
		   end if 
		   
		   Temp =mid(CodiceFiscale,I,1) 
		   J=0 
		   do 
		     Test=Lettere(J,Carattere) 
		     J=J+1 
		   loop until Temp=Test 
		   J=J-1 
		   
		   if PariDispari="P" then 
		     SommaCaratteri=SommaCaratteri + CInt(Lettere(J,ValorePari)) 
		   else 
		     SommaCaratteri=SommaCaratteri + CInt(Lettere(J,ValoreDispari)) 
		   end if 
		Next 
		
		Risultato=SommaCaratteri mod 26 
		
		Risultato=ConfrontoCarattereControllo(Risultato) 
		
		if Risultato<>CarattereControllo then 
		   Ctrl_codicefiscale = False
		else 
		   Ctrl_codicefiscale = True
		end if 
	End If
	END FUNCTION
%>