codice:
<?php
function cf($nome,$cognome,$giorno,$mese,$anno,$sesso,$codice_paese)
{
$CF = array();
// trasformo il nome ed il cognome tutto in maiuscolo
$nome = strtoupper($nome);
$cognome = strtoupper($cognome);
// cerco le consonanti del cognome
preg_match_all('|[BCDFGHJKLMNPQRSTVWXYZ]|',$cognome,$con_cognome);
$con_cognome = $con_cognome[0];
// cerco le vocali del cognome
preg_match_all('|[AEIOU]|',$cognome,$voc_cognome);
$voc_cognome = $voc_cognome[0];
// cerco le consonanti del nome
preg_match_all('|[BCDFGHJKLMNPQRSTVWXYZ]|',$nome,$con_nome);
$con_nome = $con_nome[0];
// cerco le vocali del nome
preg_match_all('|[AEIOU]|',$nome,$voc_nome);
$voc_nome = $voc_nome[0];
// costruisco le tre lettere per il cognome
$nCons = count($con_cognome);
if ($nCons > 2)
{
$CF[0] = $con_cognome[0];
$CF[1] = $con_cognome[1];
$CF[2] = $con_cognome[2];
}
elseif ($nCons == 2)
{
$CF[0] = $con_cognome[0];
$CF[1] = $con_cognome[1];
$CF[2] = $voc_cognome[0];
}
else
{
$CF[0] = $con_cognome[0];
$CF[1] = $voc_cognome[0];
$CF[2] = 'X';
}
// costruisco le tre lettere per il nome
$nCons = count($con_nome);
if ($nCons > 3)
{
$CF[3] = $con_nome[0];
$CF[4] = $con_nome[2];
$CF[5] = $con_nome[3];
}
elseif ($nCons == 3)
{
$CF[3] = $con_nome[0];
$CF[4] = $con_nome[1];
$CF[5] = $con_nome[2];
}
elseif ($nCons == 2)
{
$CF[3] = $con_nome[0];
$CF[4] = $con_nome[1];
$CF[5] = $voc_nome[0];
}
else
{
$CF[3] = $con_nome[0];
$CF[4] = $voc_nome[0];
$CF[5] = 'X';
}
// le due cifre per l'anno
// ATTENZIONE: l'anno deve essere di 4 cifrre
$anno = "$anno";
if (strlen($anno) == 2)
{
$CF[6] = $anno[0];
$CF[7] = $anno[1];
}
else
{
$CF[6] = $anno[2];
$CF[7] = $anno[3];
}
// la lettera del mese
$mese_arr = array(1=>'A','B','C','D','E','H','L','M','P','R','S','T');
$CF[8] = $mese_arr[$mese];
// le due lettere del giorno e del sesso
if ($sesso == 'F')
{
$giorno += 40;
}
$giorno = str_pad($giorno, 2, "0", STR_PAD_LEFT);
$CF[9] = $giorno[0];
$CF[10] = $giorno[1];
// 4 caratteri per il comune
$CF[11] = $codice_paese[0];
$CF[12] = $codice_paese[1];
$CF[13] = $codice_paese[2];
$CF[14] = $codice_paese[3];
// calcolo la somma dei caratteri in posizione dispari
$somma = 0;
$dispari = array('0' => 1,'1' => 0,'2' => 5,'3' => 7,'4' => 9,'5' => 13,'6' => 15,'7' => 17,'8' => 19,'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);
for ($i=0;$i<15;$i = $i+2)
{
$somma += $dispari["{$CF[$i]}"];
}
unset($dispari);
// calcolo la somma dei caratteri in posizione pari
$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);
for ($i=1;$i<15;$i = $i+2)
{
$somma += $pari["{$CF[$i]}"];
}
unset($pari);
$resto = $somma % 26;
$controllo = 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');
$lettera_controllo = $controllo[$resto];
unset($controllo);
$CF[15] = $lettera_controllo;
return implode($CF);
}
?>