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