codice:
<?php
function calcolocodicefiscale($cognome,$nome,$anno,$mese,$giorno,$sesso,$codcomune){
$e=null;
$f=null;
$codice=null;
$pre=null;
$pre2=null;
$consonanti=array("B","C","D","F","G","H","J","K","L","M","N","P","Q","R","S","T","V","W","X","Y","Z");
$vocali=array("A","E","I","O","U");
$mesi=array(1=>"A","B","C","D","E","H","L","M","P","R","S","T");
$lettere=array("A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z");
$dispari=array("0"=>1,"1"=>0,"2"=>5,"3"=>7,"4"=>9,"5"=>13,"6"=>15,"7"=>17,"8"=>18,"9"=>21,"A"=>1,"B"=>0,"C"=>5,"D"=>7,"E"=>9,"F"=>13,"G"=>15,"H"=>17,"I"=>19,"J"=>21,"K"=>2,"L"=>4,"M"=>18,"N"=>20,"O"=>11,"P"=>3,"Q"=>6,"R"=>8,"S"=>12,"T"=>14,"U"=>16,"V"=>10,"W"=>22,"X"=>25,"Y"=>24,"Z"=>23);
$pari=array("0"=>0,"1"=>1,"2"=>2,"3"=>3,"4"=>4,"5"=>5,"6"=>6,"7"=>7,"8"=>8,"9"=>9,"A"=>0,"B"=>1,"C"=>2,"D"=>3,"E"=>4,"F"=>5,"G"=>6,"H"=>7,"I"=>8,"J"=>9,"K"=>10,"L"=>11,"M"=>12,"N"=>13,"O"=>14,"P"=>15,"Q"=>16,"R"=>17,"S"=>18,"T"=>19,"U"=>20,"V"=>21,"W"=>22,"X"=>23,"Y"=>24,"Z"=>25);
// Prime 3 consonanti del cognome
for($i=0;$i<strlen($cognome);$i++){
if(in_array($cognome[$i],$consonanti) && $e<3):
$codice=$codice.$cognome[$i];
$e++;
endif;
}
if(strlen($codice)<3){
for($i=0;$i<strlen($cognome);$i++){
if(in_array($cognome[$i],$vocali) && $e<3):
$codice=$codice.$cognome[$i];
$e++;
endif;
}
}
// Prime 3 consonanti del nome
for($i=0;$i<strlen($nome);$i++){
if(in_array($nome[$i],$consonanti) && $f<3){
$codice=$codice.$nome[$i];
$f++;
}
}
if(strlen($codice)<6){
for($i=0;$i<strlen($nome);$i++){
if(in_array($nome[$i],$vocali) && $f<2):
$codice=$codice.$nome[$i];
$f++;
endif;
}
}
// Ultime 2 cifre dell'anno di nascita
$codice=$codice.$anno[2].$anno[3];
// Mese di nascita
$codice=$codice.$mesi[$mese];
// Giorno di nascita. Per le femmine 40 giorni in più.
if($sesso=="M"){
$codice=$codice.$giorno;
}else if($sesso=="F"){
$codice=$codice.$giorno+40;
}
// Codice del comune di nascita
$codice=$codice.$codcomune;
// Codice di controllo. Per i pari $pari e per i dispari $dispari
for($i=0;$i<strlen($codice);$i++){
if($i%2==0){
$pre=$pre.$pari[$codice[$i]];
}
if($i%2==1){
$pre=$pre.$dispari[$codice[$i]];
}
}
// Somma i valori del codice di controllo
for($i=0;$i<strlen($pre);$i++){
$pre2=$pre2+$pre[$i];
}
// Al resto della divisione del codice corrisponde una lettera
$codice=$codice.$lettere[($pre2%26)];
// Visualizza il codice fiscale
return $codice;
}
?>