Advertisement
NelloRizzo

Calcolo Codice Fiscale

Sep 18th, 2019
621
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // questa funzione, dati i parametri di input
  2. // nome, cognome, datanascita,sesso,comune di nascita
  3. // dovrà calcolare il codice fiscale
  4. function calcolacodicefiscale(
  5.     nome, cognome,datanascita,sesso,comune
  6. ) {
  7.     // qui verrà restituito il codice fiscale
  8.     // per consentirne l'utilizzo da parte del client
  9.     /*
  10.         Ci servono:
  11.         - 3 lettere per il cognome
  12.         - 3 lettere per il nome
  13.         - l'anno di nascita (numero)
  14.         - il mese della data di nascita (lettera)
  15.         - il giorno della data di nascita (numero)
  16.         - il codice del comune di nascita
  17.         - il carattere di controllo    
  18.     */
  19.     var risultato = ""; // creiamo una variabile per la produzione del risultato
  20.     // il nostro risultato sarà una stringa nella quale verranno
  21.     // concatenate le diverse elaborazioni
  22.     // risultato = "" -> inizializza il risultato come stringa vuota
  23.     // l'operatore "+" aggiunge al risultato il valore restituito dalle
  24.     // funzioni che andiamo ad invocare
  25.     risultato = risultato + gestisci_cognome(cognome);
  26.     risultato = risultato + gestisci_nome(nome);
  27.     risultato = risultato + gestisci_data();
  28.     risultato += gestisci_comune(); // operatore di concatenazione +=
  29.     risultato = risultato + calcola_codice();
  30.     // alla fine devo restituire il risultato:
  31.     return risultato;
  32. }
  33. /*
  34. Gestione del cognome
  35. 1. Sono necessari come detto prima 3 caratteri per rappresentare il cognome,
  36. e sono la prima la seconda e la terza consonante del cognome.
  37. 2. E' possibile che le consonanti siano meno di tre, in questo caso
  38. è possibile aggiungere le vocali nell'ordine in cui compaiono nel cognome.
  39. 3. Per cognomi più corti di 3 caratteri, è possibile sostituire il
  40. carattere mancante con la lettera X.
  41. Chiaramente se ci sono cognomi con più parti,
  42. è necessario rimuovere gli spazi e considerare tutto come un cognome unico.
  43. */
  44. function gestisci_cognome(qualecognome) {
  45.     // mettiamo in maiuscolo il cognome
  46.     var c = qualecognome.toUpperCase(); // in "c" sarà il cognome con cui lavorare
  47.     // ci servono le consonanti del cognome
  48.     // ovviamente non esiste un metodo di nessuna libreria che
  49.     // ci dia le consonanti di una stringa, quindi dobbiamo provvedere
  50.     // autonomamente!!!
  51.     /* 1. */
  52.     var consonanti = ottieni_consonanti(c);
  53.     /* 2. dobbiamo controllare la lunghezza delle consonanti */
  54.     if (consonanti.length < 3) // se la stringa delle consonanti è lunga meno di 3 caratteri
  55.     {
  56.         // devo prendere le vocali
  57.         var vocali = ottieni_vocali(c); // stesso ragionamento fatto per il recupero delle consonanti
  58.         consonanti = consonanti + vocali;
  59.         // 3.
  60.         if (consonanti.length < 3) // se ancora non abbiamo 3 caratteri
  61.             consonanti = consonanti + "X"; // aggiungiamo una X
  62.     }
  63.     // è possibile che sommando consonanti e vocali abbiamo ottenuto una
  64.     // stringa più lunga di 3 caratteri, quindi andiamo a controllare
  65.     // .substr() recupera una sottostringa
  66.     if (consonanti.length > 3) consonanti = consonanti.substr(0, 3);
  67.     // alla fine restituiamo il valore calcolato
  68.     return consonanti;
  69. }
  70. // questa funzione prenderà in input un testo e restituirà le consonanti
  71. // contenute nel testo
  72. function ottieni_consonanti(testo) {
  73.     var risultato = ""; // qui accoderò tutte le consonanti
  74.     // dobbiamo controllare tutti i caratteri UNO AD UNO contenuti nel testo
  75.     for(var indice=0; indice < testo.length; ++indice) // "indice" sulla stringa
  76.     {
  77.         // DEVO prendere il carattere nella posizione "indice"
  78.         var carattere = testo.substr(indice, 1);
  79.         //var carattere = testo.charAt(indice);
  80.         //var carattere = testo[indice];
  81.         // se si tratta di un carattere alfabetico
  82.         if (carattere >= "A" && carattere <= "Z") {
  83.             // dobbiamo vedere se è una consonante
  84.             // in realtà ci conviene controllare che NON (!)
  85.             // sia una vocale
  86.             if (!(carattere == 'E' || carattere == 'I' ||
  87.                 carattere == 'O' || carattere == 'U' || carattere == 'A'))
  88. //          if (carattere != 'E' && carattere != 'I' &&
  89. //              carattere != 'O' && carattere != 'U' && carattere != 'A')
  90.                 {
  91.                     // se è una consonante lo dobbiamo conservare
  92.                     risultato = risultato + carattere;
  93.                 }
  94.         }
  95.     }
  96.     // alla fine dobbiamo restituire tutte le consonanti conservate
  97.     return risultato;
  98. }
  99. function ottieni_vocali(testo) {
  100.     var risultato = ""; // qui accoderò tutte le consonanti
  101.     // dobbiamo controllare tutti i caratteri UNO AD UNO contenuti nel testo
  102.     for(var indice=0; indice < testo.length; ++indice) // "indice" sulla stringa
  103.     {
  104.         // DEVO prendere il carattere nella posizione "indice"
  105.         var carattere = testo.substr(indice, 1);
  106.         // se si tratta di un carattere alfabetico
  107.         if (carattere >= "A" && carattere <= "Z") {
  108.             // dobbiamo vedere se è una vocale
  109.             if (carattere == 'E' || carattere == 'I' ||
  110.                 carattere == 'O' || carattere == 'U' || carattere == 'A')
  111.                 {
  112.                     // se è una consonante lo dobbiamo conservare
  113.                     risultato = risultato + carattere;
  114.                 }
  115.         }
  116.     }
  117.     // alla fine dobbiamo restituire tutte le consonanti conservate
  118.     return risultato;
  119. }
  120. /*
  121. Per il nome il discorso è analogo con la particolarità che se il nome
  122. è composto da (*) 4 o più consonanti vengono prese nell'ordine la prima,
  123. la terza e la quarta.
  124. Anche qui potremmo trovarci nella situazione di un numero
  125. di consonanti minore di 3 e allo stesso modo si aggiungo le vocali.
  126. Ripetiamo anche qui che se il nome è più corto di 3 lettere
  127. è possibile sostituire i caratteri mancanti con delle X.
  128. Se il nome fosse composto da più nomi, bisogna considerarlo tutto assieme.
  129. */
  130. function gestisci_nome(qualenome) {
  131.     // mettiamo in maiuscolo il nome
  132.     var c = qualenome.toUpperCase(); // in "c" sarà il cognome con cui lavorare
  133.     // ci servono le consonanti del cognome
  134.     // fortunatamente prima avevamo scritto il metodo per la gestione cognome
  135.     /* 1. */
  136.     var consonanti = ottieni_consonanti(c);
  137.     // (*) se ci sono più di 4 consonanti devo scartare la seconda
  138.     if (consonanti.length > 3) {
  139.         //                prima consonante   +   terza e quarta
  140.         //                    |                          |
  141.         //                    V                          V
  142.         consonanti = consonanti.substr(0, 1) + consonanti.substr(2,2);
  143.     }
  144.     /* 2. dobbiamo controllare la lunghezza delle consonanti */
  145.     if (consonanti.length < 3) // se la stringa delle consonanti è lunga meno di 3 caratteri
  146.     {
  147.         // devo prendere le vocali
  148.         var vocali = ottieni_vocali(c); // stesso ragionamento fatto per il recupero delle consonanti
  149.         consonanti = consonanti + vocali;
  150.         // 3.
  151.         if (consonanti.length < 3) // se ancora non abbiamo 3 caratteri
  152.             consonanti = consonanti + "X"; // aggiungiamo una X
  153.     }
  154.     // è possibile che sommando consonanti e vocali abbiamo ottenuto una
  155.     // stringa più lunga di 3 caratteri, quindi andiamo a controllare
  156.     // .substr() recupera una sottostringa
  157.     if (consonanti.length > 3) consonanti = consonanti.substr(0, 3);
  158.     // alla fine restituiamo il valore calcolato
  159.     return consonanti;
  160.  }
  161. function gestisci_data() { return "00X00"; }
  162. function gestisci_comune() { return "X000"; }
  163. function calcola_codice() { return "X"; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement