Utility per la verifica del codice fiscale in C# basata sul confronto del CIN (ultimo carattere)
C#: VerificaCodiceFiscale.cs
public static bool VerificaCodiceFiscale(string codiceFiscale)
{
    if (codiceFiscale == null || codiceFiscale.Length != 16)
        return false;

    var newCin = CFCalcolaCIN(codiceFiscale);
    if (newCin == '-' || newCin == '.')
        return false;

    char cin = codiceFiscale[15];
    return newCin == cin;
}

/// <summary>
/// Dove cf è una stringa contenente i primi 15 caratteri del codice fiscale da controllare 
/// </summary>
/// <param name="cf">codice fiscale</param>
/// <returns>CIN</returns>
private static char CFCalcolaCIN(string cf)
{
    int cin = 0;
    bool alterna = true;
    const bool CARATTERIDISPARI = true;

    if (cf == null || cf.Length != 16)
        return '-';

    if (cf.Length == 16)
        cf = cf.Substring(0, 15);
    cf = cf.ToUpper();

    int[] NUMLETT = { 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0 }; // 1 = lettera, 0 = Numero
    int[] TD = { 01, 00, 05, 07, 09, 13, 15, 17, 19, 21, 02, 04, 18, 20, 11, 03, 06, 08, 12, 14, 16, 10, 22, 25, 24, 23 };

    for (int i = 0; i < 15; i++)
    {
        int car = (int)cf[i];
        int num = -1;
        if (car >= 48 && car <= 58)
        {     //cifre da 0 a 9
            car -= 48;
            num = 0;
        }
        else if (car >= 65 && car <= 90)
        {   //lettere
            car -= 65;
            num = 1;
        }

        //se c'é una discordanza sulla posizione lettera/numero
        if (num != NUMLETT[i])
        {
            return '.';
        }

        if (alterna == CARATTERIDISPARI)
        {
            cin += TD[car];
            alterna = false;
        }
        else
        {
            cin += car;
            alterna = true;
        }
    }
    cin = (cin - (int)(cin / 26) * 26) + 65;
    //Ritorna una stringa di 1 carattere (char) contenente il CIN
    return (char)cin;
}
Potrebbe interessarti anche: