codice:
function ControllaCF(cf)
{
	nome = document.anagr.nome.value;
	cognome = document.anagr.cognome.value;
	
	if (Trim(cf)=='')  return '';
	cf = cf.toUpperCase();
	if (cf.length!=16)
	{
		return "La lunghezza del codice fiscale non è corretta: il codice fiscale dovrebbe essere lungo esattamente 16 caratteri.";	
	}
	else
	{
		cchar = cf.substring(0, 6);
		if (isNaN(cchar)==false)
		{
			return "I primi sei caratteri sono riferiti al cognome ed il nome e non possono essere numerici.";			
		}
		else
		{
			var cod_nominativo = getChars(cognome, false) + getChars(nome,true);	
			if (cchar!=cod_nominativo)
			{
				return "I primi sei caratteri sono riferiti al cognome ed il nome e non sono corretti.";			
			}
		}
		
		cchar = cf.substring(6, 8);
		strAnno = document.anagr.anno_field.value;
		strAnno = strAnno.substring(strAnno.length, strAnno.length-2);
		
		if (cchar!=strAnno)
		{
			return "Il settimo e l\'ottavo carattere sono riferiti all\' anno di nascita.";			
		}
		cchar = cf.substring(8,9);
		switch (document.anagr.mese_field_desc.value) 
		{
			case '1':
				strMese = 'A';
				break;
			case '2':
				strMese = 'B';
				break;
			case '3':
				strMese = 'C';
				break;
			case '4':
				strMese = 'D';
				break;
			case '5':
				strMese = 'E';
				break;	
			case '6':
				strMese = 'H';
				break;
			case '7':
				strMese = 'L';
				break;
			case '8':
				strMese = 'M';
				break;
			case '9':
				strMese = 'P';
				break;
			case '10':
				strMese = 'R';
				break;		
			case '11':
				strMese = 'S';
				break;		
			case '12':
				strMese = 'T';
				break;										
		}		
		if (cchar!=strMese)
		{
			return "Il nono carattere si riferisce al mese di nascita.";			
		}	
		
		cchar = cf.substring(9,11);
		if (document.anagr.sex[1].checked==true)
		{
			cchar = cchar - 40;
		}
		
		if (parseFloat(cchar)!=document.anagr.giorno_field.value)
		{
			return "Il decimo e l'undicesimo carattere si riferiscono al giorno di nascita.";			
		}

		validi = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
		for( i = 0; i < 16; i++ ){
			if( validi.indexOf( cf.charAt(i) ) == -1 )
				return "Il codice fiscale contiene un carattere non valido `" +
					cf.charAt(i) +
					"'.\nI caratteri validi sono le lettere e le cifre.\n";
		}
		set1 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		set2 = "ABCDEFGHIJABCDEFGHIJKLMNOPQRSTUVWXYZ";
		setpari = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		setdisp = "BAKPLCQDREVOSFTGUHMINJWZYX";
		s = 0;
		for( i = 1; i <= 13; i += 2 )
			s += setpari.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
		for( i = 0; i <= 14; i += 2 )
			s += setdisp.indexOf( set2.charAt( set1.indexOf( cf.charAt(i) )));
		if( s%26 != cf.charCodeAt(15)-'A'.charCodeAt(0) )
			return "Il codice fiscale non è corretto:\n"+
				"il codice di controllo non corrisponde.\n";
		return "";
	}
}