E' abbastanza semplice da fare, ci vogliono letteralmente pochi secondi!
Basta che scrivi una funzione che prende come parametro il codice fiscale e restituisca true se l'operazione riesce e false se l'operazione non riesce.
Nello specifico il parametro della funzione lo devi chiamare $value (ad es. nell'attuale funzione ControlloCF su chiama $cf) e poi dove ci sono i commenti // Errore e // Tutto ok devi mettere, rispettivamente, il return false ed il return true, perché nel primo caso hai un errore mentre nel secondo l'operazione riesce
Mi sono scordato a postarti l'espressione regolare che faceva i controlli generali!
rimetto il codice qui
Codice PHP:
if (preg_match('/^([A-Z]{6})([0-9]{2})([A-Z])([0-9]{2})([A-Z])([0-9]{3})([A-Z])$/i', $value) > 0)
{
// Verifica se ha già inizializzato i valori corrispondenti ai caratteri
if (isset($fiscalCodeCharacterValues) === false)
{
// Inizializza l'array
$fiscalCodeCharacterValues = 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);
}
// Rende il valore passato tutto in maiuscolo
$value = strtoupper($value);
// Inizializza il valore di controllo
$checkValue = 0;
// Inizia il calcolo del valore di controllo sui numeri dispari
for($index = 1; $index <= 13; $index += 2)
{
// Acquisisce il caratteri dispari
$char = ord($value[$index]);
// Confronta il valore
if (48 <= $char && $char <= 57)
{
$checkValue += $char - 48;
}
else
{
$checkValue += $char - 65;
}
}
// Continua il calcolo del valore di controllo sui numeri pari
for($index = 0; $index <= 14; $index += 2)
{
// Aggiunge i valore per il codice di controllo
$checkValue += $fiscalCodeCharacterValues[$value[$index]];
}
// Esegue gli ultimi calcoli sul valore di controllo
$checkValue = ($checkValue % 26) + 65;
// Confronta il valore
if ($checkValue != ord($value[15]))
{
// Errore
}
// Tutto ok
}