il sito codicefiscale.com calcola erratamente i codici fiscali corti

cambiare la X non basta perché andrebbe ricalcolato pure il codice di controllo motivo per il quale il codice fiscale continua a risultare errato

qui ti posto un altro pezzo di codice per il controllo del codice fiscale, semplificato ed un pò ottimizzato

Codice PHP:
// 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 
la variabile $fiscalCodeCharacterValues la faccio inizializzare solo se necessaria perché controllando anche la partita iva potrebbe presentarsi il caso in cui la partita iva contenga il codice fiscale con il risultato che verrebbe inizializzata due volte

NOTA1: controllare la validità del codice fiscale può essere utile all'utente per dare un minimo di feedback ma, nella pratica, è inutile perché non è possibile verificare i casi di omonimia che per quanto rari possano essere ci sono e fanno danni

NOTA2: la partita iva potrebbe anche essere nel formato internazionale ovvero non composta solo dal numero quindi scartare tutte le p.ive che hanno una lunghezza diversa da 11 è errato ... se è 13 è pure corretta, basta eliminare i primi due caratteri dal controllo (per le partite ive italiane ovviamente)