Advertisement
NelloRizzo

Calcolo Codice Fiscale in C#

Nov 6th, 2018
469
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.71 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. // https://pastebin.com/yHcubBDm
  8.  
  9. namespace Es02_CodiceFiscale
  10. {
  11.     /*
  12.      * Creare un sistema per il calcolo del codice fiscale
  13.      * di una persona fisica.
  14.        Servono:
  15.         - 3 lettere per il [cognome]
  16.         - 3 lettere per il [nome]
  17.         - [l'anno di nascita (numero)
  18.         - il mese della data di nascita (lettera)
  19.         - il giorno della data di nascita (numero)]
  20.         - il sesso
  21.         - il [codice del comune di nascita]
  22.     * */
  23.     public enum Sesso { Uomo, Donna }
  24.     class CodiceFiscale
  25.     {
  26.         private string _cognome;
  27.         private string _nome;
  28.         public string Cognome
  29.         {
  30.             get { return _cognome; }
  31.             set { _cognome = value.ToUpper(); }
  32.         }
  33.         public string Nome
  34.         {
  35.             get { return _nome; }
  36.             set { _nome = value.ToUpper(); }
  37.         }
  38.         public Sesso Sesso { get; set; }
  39.         public DateTime DataNascita { get; set; }
  40.         public string CittaNascita { get; set; }
  41.  
  42.         public string CalcolaCodiceFiscale()
  43.         {
  44.             // 3 lettere per il cognome
  45.             string n = GestisciNome();
  46.             // 3 lettere per il nome
  47.             string c = GestisciCognome();
  48.             // l'anno di nascita (numero)
  49.             // il mese della data di nascita(lettera)
  50.             // il giorno della data di nascita(numero)
  51.             string d = GestisciData();
  52.             // il codice del comune di nascita
  53.             string l = GestisciComune();
  54.             // il carattere di controllo
  55.             // unisco le stringhe calcolate finora
  56.             string cf = n + c + d + l;
  57.             // passo al calcolo del codice di controllo
  58.             // per il quale sono necessari i caratteri ottenuti finora
  59.             string ck = CalcolaCodiceControllo(cf);
  60.             // unisco il codice di controllo ai primi 15
  61.             // caratteri trovati precedentemente
  62.             cf += ck;
  63.             // restituisce il codice fiscale calcolato
  64.             return cf;
  65.         }
  66.  
  67.         private string GestisciNome()
  68.         {
  69.             // Per il nome il discorso è analogo al cognome
  70.             // con la particolarità
  71.             // che se il nome è composto da 4 o più consonanti
  72.             // vengono prese nell'ordine
  73.             // la prima, la terza e la quarta.
  74.             var cv = new ConsVoc();
  75.             cv.ProcessaTesto(Nome);
  76.             string c = cv.Consonanti;
  77.             // se le consonanti sono + di 3 devo prendere la prima
  78.             // la terza e la quarta
  79.             if (c.Length > 3) c = c.Substring(0, 1) + c.Substring(2, 2);
  80.             string v = cv.Vocali;
  81.             // faccio le stesse cose che ho fatto nel cognome
  82.             string risultato = c + v + "XXX";
  83.             return risultato.Substring(0, 3);
  84.         }
  85.         // un piccolo servizio che dato un testo
  86.         // separi le consonanti dalle vocali e mi dia
  87.         // la possibilità di leggerle separatamente
  88.         struct ConsVoc
  89.         {
  90.             // una volta richiamato il metodo processatesto
  91.             // fornirà le consonanti qui
  92.             public string Consonanti { get; private set; }
  93.             // e le vocali qui
  94.             public string Vocali { get; private set; }
  95.             // processa un testo e separa le consonanti dalle vocali
  96.             public void ProcessaTesto(string testo)
  97.             {
  98.                 // dobbiamo scorrere carattere per carattere
  99.                 // il testo e capire se il carattere che stiamo
  100.                 // gestendo è una consonante o una vocale
  101.  
  102.                 // scorrere un testo carattere per carattere
  103.                 foreach (char c in testo)
  104.                 {
  105.                     // se c è un carattere alfabetico
  106.                     if (char.IsLetter(c))
  107.                     {
  108.                         // controllo che si tratti di una vocale
  109.                         if (c == 'A' || c == 'O' || c == 'U' || c == 'I' || c == 'E')
  110.                         {
  111.                             // se sì lo aggiungo alle vocali
  112.                             Vocali += c;
  113.                         }
  114.                         else
  115.                         {
  116.                             // altrimenti lo aggiungo alle consonanti
  117.                             Consonanti += c;
  118.                         }
  119.                     }
  120.                 }
  121.             }
  122.         }
  123.         private string GestisciCognome()
  124.         {
  125.             // Sono necessarie come detto prima 3 caratteri per rappresentare
  126.             // il cognome, e sono la prima la seconda e la terza
  127.             // consonante del cognome.
  128.             // CONSIDERAZIONI PERSONALI:
  129.             // mi serve avere separatamente le consonanti e le vocali
  130.             // FINE CONSIDERAZIONI PERSONALI
  131.             var cv = new ConsVoc();
  132.             cv.ProcessaTesto(Cognome);
  133.             string c = cv.Consonanti;
  134.             string v = cv.Vocali;
  135.             // E' possibile che le consonanti siano meno di tre,
  136.             // in questo caso è possibile aggiungere le vocali
  137.             // nell'ordine in cui compaiono nel cognome.
  138.             // Per cognomi più corti di 3 caratteri,
  139.             // è possibile sostituire il carattere mancante con
  140.             // la lettera X.
  141.             // Chiaramente se ci sono cognomi con più parti,
  142.             // è necessario rimuovere gli spazi e considerare
  143.             // tutto come un cognome unico.
  144.             string risultato = c + v + "XXX";
  145.             // PPR AEI XXX
  146.             // risultato = PPRAEIXXX
  147.             // sottostringa di una stringa (inizio, lunghezza)
  148.             // substring(0, 3) = sottostringa dal carattere 0 di lunghezza 3
  149.             // risultato = substring di risultato da 0 con lunghezza 3
  150.             // [PPR]......
  151.             return risultato.Substring(0, 3);
  152.         }
  153.  
  154.         private string GestisciData()
  155.         {
  156.             return "00X00";
  157.         }
  158.  
  159.         private string CalcolaCodiceControllo(string cf)
  160.         {
  161.             return "X";
  162.         }
  163.  
  164.         private string GestisciComune()
  165.         {
  166.             return "X000";
  167.         }
  168.     }
  169.     class Program
  170.     {
  171.         static void Main(string[] args)
  172.         {
  173.             CodiceFiscale f = new CodiceFiscale()
  174.             {
  175.                 Nome = "paPeRino",
  176.                 Cognome = "paolino",
  177.                 Sesso = Sesso.Uomo,
  178.                 DataNascita = new DateTime(2018, 11, 6), // 6/11/2018
  179.                 CittaNascita = "Paperopoli"
  180.             };
  181.             Console.WriteLine("Codice fiscale: {0}", f.CalcolaCodiceFiscale());
  182.         }
  183.     }
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement