Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- // https://pastebin.com/yHcubBDm
- namespace Es02_CodiceFiscale
- {
- /*
- * Creare un sistema per il calcolo del codice fiscale
- * di una persona fisica.
- Servono:
- - 3 lettere per il [cognome]
- - 3 lettere per il [nome]
- - [l'anno di nascita (numero)
- - il mese della data di nascita (lettera)
- - il giorno della data di nascita (numero)]
- - il sesso
- - il [codice del comune di nascita]
- * */
- public enum Sesso { Uomo, Donna }
- class CodiceFiscale
- {
- private string _cognome;
- private string _nome;
- public string Cognome
- {
- get { return _cognome; }
- set { _cognome = value.ToUpper(); }
- }
- public string Nome
- {
- get { return _nome; }
- set { _nome = value.ToUpper(); }
- }
- public Sesso Sesso { get; set; }
- public DateTime DataNascita { get; set; }
- public string CittaNascita { get; set; }
- public string CalcolaCodiceFiscale()
- {
- // 3 lettere per il cognome
- string n = GestisciNome();
- // 3 lettere per il nome
- string c = GestisciCognome();
- // l'anno di nascita (numero)
- // il mese della data di nascita(lettera)
- // il giorno della data di nascita(numero)
- string d = GestisciData();
- // il codice del comune di nascita
- string l = GestisciComune();
- // il carattere di controllo
- // unisco le stringhe calcolate finora
- string cf = n + c + d + l;
- // passo al calcolo del codice di controllo
- // per il quale sono necessari i caratteri ottenuti finora
- string ck = CalcolaCodiceControllo(cf);
- // unisco il codice di controllo ai primi 15
- // caratteri trovati precedentemente
- cf += ck;
- // restituisce il codice fiscale calcolato
- return cf;
- }
- private string GestisciNome()
- {
- // Per il nome il discorso è analogo al cognome
- // con la particolarità
- // che se il nome è composto da 4 o più consonanti
- // vengono prese nell'ordine
- // la prima, la terza e la quarta.
- var cv = new ConsVoc();
- cv.ProcessaTesto(Nome);
- string c = cv.Consonanti;
- // se le consonanti sono + di 3 devo prendere la prima
- // la terza e la quarta
- if (c.Length > 3) c = c.Substring(0, 1) + c.Substring(2, 2);
- string v = cv.Vocali;
- // faccio le stesse cose che ho fatto nel cognome
- string risultato = c + v + "XXX";
- return risultato.Substring(0, 3);
- }
- // un piccolo servizio che dato un testo
- // separi le consonanti dalle vocali e mi dia
- // la possibilità di leggerle separatamente
- struct ConsVoc
- {
- // una volta richiamato il metodo processatesto
- // fornirà le consonanti qui
- public string Consonanti { get; private set; }
- // e le vocali qui
- public string Vocali { get; private set; }
- // processa un testo e separa le consonanti dalle vocali
- public void ProcessaTesto(string testo)
- {
- // dobbiamo scorrere carattere per carattere
- // il testo e capire se il carattere che stiamo
- // gestendo è una consonante o una vocale
- // scorrere un testo carattere per carattere
- foreach (char c in testo)
- {
- // se c è un carattere alfabetico
- if (char.IsLetter(c))
- {
- // controllo che si tratti di una vocale
- if (c == 'A' || c == 'O' || c == 'U' || c == 'I' || c == 'E')
- {
- // se sì lo aggiungo alle vocali
- Vocali += c;
- }
- else
- {
- // altrimenti lo aggiungo alle consonanti
- Consonanti += c;
- }
- }
- }
- }
- }
- private string GestisciCognome()
- {
- // Sono necessarie come detto prima 3 caratteri per rappresentare
- // il cognome, e sono la prima la seconda e la terza
- // consonante del cognome.
- // CONSIDERAZIONI PERSONALI:
- // mi serve avere separatamente le consonanti e le vocali
- // FINE CONSIDERAZIONI PERSONALI
- var cv = new ConsVoc();
- cv.ProcessaTesto(Cognome);
- string c = cv.Consonanti;
- string v = cv.Vocali;
- // E' possibile che le consonanti siano meno di tre,
- // in questo caso è possibile aggiungere le vocali
- // nell'ordine in cui compaiono nel cognome.
- // Per cognomi più corti di 3 caratteri,
- // è possibile sostituire il carattere mancante con
- // la lettera X.
- // Chiaramente se ci sono cognomi con più parti,
- // è necessario rimuovere gli spazi e considerare
- // tutto come un cognome unico.
- string risultato = c + v + "XXX";
- // PPR AEI XXX
- // risultato = PPRAEIXXX
- // sottostringa di una stringa (inizio, lunghezza)
- // substring(0, 3) = sottostringa dal carattere 0 di lunghezza 3
- // risultato = substring di risultato da 0 con lunghezza 3
- // [PPR]......
- return risultato.Substring(0, 3);
- }
- private string GestisciData()
- {
- return "00X00";
- }
- private string CalcolaCodiceControllo(string cf)
- {
- return "X";
- }
- private string GestisciComune()
- {
- return "X000";
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- CodiceFiscale f = new CodiceFiscale()
- {
- Nome = "paPeRino",
- Cognome = "paolino",
- Sesso = Sesso.Uomo,
- DataNascita = new DateTime(2018, 11, 6), // 6/11/2018
- CittaNascita = "Paperopoli"
- };
- Console.WriteLine("Codice fiscale: {0}", f.CalcolaCodiceFiscale());
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement