Primi Sei Caratteri del Codice Fiscale in C#


Calcoliamo i primi sei caratteri del codice fiscale in linguaggio C#, tre dal cognome e tre dal nome, i problemi nascono quando non abbiamo abbastanza consonanti e quindi occorre inserire le vocalim o peggio ancora gli asterischi.

Nella lezione precedente avevamo iniziato la stesura di una classe CPersona contenente anche il codice fiscale, che viene calcolato con i dati disponibili. In questa nuova lezione vedremo come estrapolare i caratteri, 3 dal nome e 3 dal cognome, che compongono i primi sei caratteri del codice fiscale. Se non lo avete fatto la volta scorsa vi suggerisco di leggervi questa mia pagina nella quale dico tutto sul codice fiscale. Implementiamo una funzione che restituisca i 3 caratteri dal nome ed i 3 caratteri dal cognome.

...
private bool FindString(string strVal, char cVal)
{
   foreach (char c in strVal)
   {
      if (c == cVal)
        return true;
   }
   return false;
}

private string ExtractChars(string strVal, bool bCognome)
{
   string retValue = "";
   string strVoc = "AaEeIiOoUu";
   int numCon = 0;
   int numVoc = 0;
   for (int i = 0; i < strVal.Length; ++i)
   {
      if (!FindString(strVoc, strVal[i]) && strVal[i] != ' ')
      {
         retValue += strVal[i];
         ++numCon;
      }
      if (numCon >= 3)
      {
        if (bCognome)
        {
           break;
        }
        else
        {
           for (int k = i + 1; k <= strVal.Length; ++k)
           {
               if (!FindString(strVoc, strVal[k]) && strVal[k] != ' ')
               {
                   retValue += strVal[k];
                   string strTemp = retValue;
                   retValue = strTemp.Substring(0, 1);
                   retValue += strTemp.Substring(strTemp.Length - 2, 2);
                   i = strVal.Length;
                   break;
               }
          }
        }
       }
     }
     if (numCon < 3)
     {
       for (int i = 0; i < strVal.Length; ++i)
       {
          if (FindString(strVoc, strVal[i]))
          {
             retValue += strVal[i];
             ++numVoc;
          }
          if ((numCon + numVoc) >= 3)
             break;
       }
      }
      if ((numCon + numVoc) < 3)
      {
         if ((numCon + numVoc) == 0)
           retValue = "***";
         if ((numCon + numVoc) == 1)
           retValue = "***";
         if ((numCon + numVoc) == 2)
           retValue += 'X';
      }
      return retValue;
}
...

Ho creato 2 metodi privati che ovviamente vanno inseriti nella nostra classe e penso siano abbastanza chiari, quindi studiate il codice riga per riga cercando di capire cosa ho fatto. Se qualcuno avesse in mente un altro procedimento o velesse cambiare qualcosa, potete farmelo sapere.
Se qualcuno avesse bisogno di maggiori informazioni o vuole richiedermi qualcosa può porre le sue domande nel forum dedicato a questo linguaggio.

<< Lezione Precedente - Lezione Successiva >>

Altre letture consigliate:

  1. Codice Fiscale in Access
  2. Calcolo del Codice Fiscale in C#
  3. Calcolo del Codice Fiscale
   


Info su Giampaolo Rossi

Sviluppatore software da oltre 16 anni.
Questa voce è stata pubblicata in C# (sharp) e contrassegnata con . Contrassegna il permalink.

6 risposte a Primi Sei Caratteri del Codice Fiscale in C#

  1. Luca scrive:

    Ciao Giampaolo
    Ti ringrazio per aver messo a disposizione questo codice che mi è stato molto utile.
    Voglio però segnalarti un errore.
    Nel calcolare il mio codice fiscale mi sono occorto che non veniva estratta correttamente la vocale nel caso di nomi con numero di consonanti inferiore a 3.
    Ho corretto il codice in questo modo:

    if (numCon < 3)
    {
    for (int i = 0; i = 3)
    break;
    }
    }

    Ora sembra funzionare correttamente.
    Confermi?

    Ciao
    Luca

    • Luca scrive:

      Il codice non è stato parsato correttamente.
      Correggo:

      if (numCon < 3)
      {

      if (FindString(strVoc, strVal[i])) // HO TOLTO IL ! (NOT)

      }

      Ciao
      Luca

      • giampy107 scrive:

        Ciao Luca, in effetti hai ragione, va tolta la negazione perché in assenza di consonanti vanno trovate le vocali, cosa che come era prima non poteva avvenire. Grazie.

  2. fermat scrive:

    di preciso i metdo ExtractChar che fa??

    ps: il codice nn è aggiornato con le modifiche di luca giusto?

  3. Maicol scrive:

    Ciao, per evitare tutta una serie di controlli molto difficili non puoi suddividere la stringa ricevuta in 2? Una stringa di sole consonanti ed una di sole vocali.

    strVal = strVal.Replace(” “, “”).ToUpper();
    string str1 = Regex.Replace(strVal, “[AEIOU]“, “”);
    string str2 = Regex.Replace(strVal, “[^AEIOU]“, “”);

    Poi dovrai solo preoccuparti di controllare la lunghezza delle varie stringhe!

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ricevi un avviso se ci sono nuovi commenti. Oppure iscriviti senza commentare.