Home / Indice sezione
 www.icosaedro.it 

 Controllo del codice fiscale e della partita IVA

cf-vb.txt

'
' 2003-05-28  Carlo Marchesini <archATmarchesini-it.com>
'

function ControllaCF(cf)
	if cf = "" then 
	controllaCF = ""
else
'------------------------------------------
	if Len(cf) <> 16 then
		controllaCF = "La lunghezza del codice fiscale non &egrave; " &_
				"corretta: il codice fiscale dovrebbe essere " &_ 
				"lungo esattamente 16 caratteri."
	else			
'--------------------------------------------------
		cf = Ucase(cf)
		Dim objER, result
		 ' istanzia l'oggetto REGULAR EXPRESSION
  		Set objER = New RegExp
		' cerca il pattern in tutta la stringa di input
  		objER.Global = True
		' nessuna differenza fra maiuscole/minuscole
		objER.IgnoreCase = True

 		 '''''''''''''''''''''''''''''''''''''''''''''''''
		  objER.Pattern = "^[\w]+$"
 		 '''''''''''''''''''''''''''''''''''''''''''''''''

 		 ' verifica la corrispondenza con il pattern
  		result = objER.Test(cf)
'response.write(result)
		if result <> true then 
		controllaCF = "Il codice fiscale contiene dei caratteri non validi:" &_
		"i soli caratteri validi sono le lettere e le cifre."
		 Set objER = Nothing
		else 
'-----------------------------------------------------------

	Dim s, c, s1, s2, i
	s1 = 0
	i = 0 
''''''''''''''''''''''''''''''''''''''
'prima versione - meno elegante
'	for i = 1 to 14 
'	i = i + 1 
''''''''''''''''''''''''''''''''''''''
for i = 2 to 14 step 2
		c = Mid(cf, i, 1 )
		if( "0" <= c AND c <= "9" ) then
			s1 = s1 + Asc(c) - Asc("0")
''''''''''''''''''''''''
'controlla il loop
'			response.write("c= "& c & " s1= "& s1 &"<br>")
''''''''''''''''''''''''
		else
			s1 = s1 + Asc(c) - Asc("A")
''''''''''''''''''''''''
'controlla il loop
'			response.write("c= "& c & " s1= "& s1 &"<br>")
''''''''''''''''''''''''
		end if
	next
'''''''''''''''''''''
'controlla la somma delle cifre pari
'	response.write("s1="&s1&"<br>")
''''''''''''''''''''''
	s2 = 0
'''''''''''''''''''''''''''''''
'prima versione - meno elegante
'	for i = 0 to 14
'	i = i + 1 
'''''''''''''''''''''''''''''
for i = 1 to 15 step 2
		c = Mid(cf, i, 1 )
		select Case (c)
		case "0"
		  s2 = s2 + 1
		case "1"
		  s2 = s2 + 0
		case "2"
		  s2 = s2 + 5
		case "3"
		  s2= s2 + 7
		case "4"
		  s2 = s2 + 9
		case "5"
		  s2 = s2 + 13
		case "6"
		  s2 = s2 + 15
		case "7"
		  s2 = s2 + 17
		case "8"
		  s2 = s2 + 19
		case "9"
		  s2 = s2 + 21
		case "A"
		  s2 = s2 + 1
		case "B"
		  s2 = s2 + 0
		case "C"
		  s2 = s2 + 5
		case "D"
		  s2 = s2 + 7
		case "E"
		  s2 = s2 + 9
		case "F"
		  s2 = s2 + 13
		case "G"
		  s2 = s2 + 15
		case "H"
		  s2 = s2 + 17
		case "I"
		  s2 = s2 + 19
		case "J"
		  s2 = s2 + 21
		case "K"
		  s2 = s2 + 2
		case "L"
		  s2 = s2 + 4
		case "M"
		  s2 = s2 + 18
		case "N"
		  s2 = s2 + 20
		case "O"
		  s2 = s2 + 11
		case "P"
		  s2 = s2 + 3
		case "Q"
		  s2 = s2 + 6
		case "R"
		  s2 = s2 + 8
		case "S"
		  s2 = s2 + 12
		case "T"
		  s2 = s2 + 14
		case "U"
		  s2 = s2 + 16
		case "V"
		  s2 = s2 + 10
		case "W"
		  s2 = s2 + 22
		case "X"
		  s2 = s2 + 25
		case "Y"
		  s2 = s2 + 24
		case "Z"
		  s2 = s2 + 23
		End select
''''''''''''''''''''''''
'controlla il loop
'		response.write("c= "& c & " s2= "& s2 &"<br>")		
''''''''''''''''''''''''
		next
		s= s1+s2
''''''''''''''''''''''''
'controlla la somma dispari
'			response.write("s2="&s2&"<br>")
'controlla il totale
'		response.write(s&"<br>")
''''''''''''''''''''''''		
		if chr((s Mod 26) + Asc("A")) <> Mid(cf, 16, 1) then
		controllaCF = "Il codice fiscale non &egrave; corretto: " &_
		"il codice di controllo non corrisponde."
		else
		controllaCF = ""
		end if
'-----------------------------------------------------------
		end if		
'--------------------------------------------------
	end if
'------------------------------------------
end if 
end function

Vedi il codice come puro testo.

Umberto Salsi
Commenti
Contatto
Mappa
Home / Indice sezione
An abstract of the latest comments from the visitors of this page follows. Please, use the Comments link above to read all the messages or to add your contribute.

2019-01-31 by alberto fauro
Migliorie alla regex
il pattern ^[0-9A-Z]{16}$ può essere migliorato usando ^[A-Z]{6}[0-9LMNPQRSTUV]{2}[ABCDEHLMPRST]{1}[0-9LMNPQRSTUV]{2}[A-Z]{1}[0-9LMNPQRSTUV]{3}[A-Z]{1}$ che tiene conto delle sostituzioni valide delle cifre con lettere nel caso di omocodie [more...]