From b406b8ff7534570c96d4dbbacb16edc092929045 Mon Sep 17 00:00:00 2001 From: La Programmatrice Verde Date: Tue, 4 Nov 2025 21:38:53 +0100 Subject: [PATCH] Primo caso nome --- src/appComune/GestisciCodiceFiscale.java | 52 +++++++++++++++--------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/src/appComune/GestisciCodiceFiscale.java b/src/appComune/GestisciCodiceFiscale.java index a670d44..2da0a33 100644 --- a/src/appComune/GestisciCodiceFiscale.java +++ b/src/appComune/GestisciCodiceFiscale.java @@ -4,6 +4,7 @@ */ package appComune; +import java.util.Arrays; import java.util.Date; import utility.GestisciStringhe; @@ -32,15 +33,15 @@ public class GestisciCodiceFiscale { char[] caratteriCognome = cognome.toCharArray(); int[] posizioniConsonanti = trovaConsonanti(cognome); - if (posizioniConsonanti[0] == 0) { // non è stata trovata la prima consonante, ovvero non ce ne sono + if (posizioniConsonanti[0] == -1) { // non è stata trovata la prima consonante, ovvero non ce ne sono ritorno = quintoCasoCognome(caratteriCognome); } else { - if (posizioniConsonanti[2] == 0) { // non è stata trovata la terza consonante, AKA l'array nell'ultima + if (posizioniConsonanti[2] == -1) { // non è stata trovata la terza consonante, AKA l'array nell'ultima // posizione // ha valore di default char primaVocale = trovaPrimaVocale(caratteriCognome)[0]; int posizionePrimaVocale = trovaPrimaVocale(caratteriCognome)[1]; - if (posizioniConsonanti[1] == 0) { // non è stata trovata la seconda consonante, AKA l'array nella + if (posizioniConsonanti[1] == -1) { // non è stata trovata la seconda consonante, AKA l'array nella // penultima // posizione // ha valore di default @@ -48,23 +49,23 @@ public class GestisciCodiceFiscale { int secondaVocale = trovaSecondaVocale(caratteriCognome, posizionePrimaVocale); if (secondaVocale == -1) { - ritorno = Character.toString(caratteriCognome[posizioniConsonanti[1]]) + ritorno = Character.toString(caratteriCognome[posizioniConsonanti[0]]) + Character.toString(primaVocale) + Character.toString('x'); } else { - ritorno = Character.toString(caratteriCognome[posizioniConsonanti[1]]) + ritorno = Character.toString(caratteriCognome[posizioniConsonanti[0]]) + Character.toString(primaVocale) + Character.toString(secondaVocale); } } else { - ritorno = Character.toString(caratteriCognome[posizioniConsonanti[1]]) - + Character.toString(caratteriCognome[posizioniConsonanti[2]]) + ritorno = Character.toString(caratteriCognome[posizioniConsonanti[0]]) + + Character.toString(caratteriCognome[posizioniConsonanti[1]]) + Character.toString(primaVocale); } } else { - ritorno = Character.toString(caratteriCognome[posizioniConsonanti[1]]) - + Character.toString(caratteriCognome[posizioniConsonanti[2]]) - + Character.toString(caratteriCognome[posizioniConsonanti[3]]); + ritorno = Character.toString(caratteriCognome[posizioniConsonanti[0]]) + + Character.toString(caratteriCognome[posizioniConsonanti[1]]) + + Character.toString(caratteriCognome[posizioniConsonanti[2]]); } } @@ -96,14 +97,15 @@ public class GestisciCodiceFiscale { return ritorno; } - static int[] trovaConsonanti(String cognome) { + static int[] trovaConsonanti(String cognome) { //trova le prime 4 consonanti boolean exit = false; char[] caratteriCognome = cognome.toCharArray(); - int[] posizioniConsonanti = new int[4]; - int[] ritorno = new int[3]; + int[] posizioniConsonanti = new int[5]; + int[] ritorno = new int[4]; + Arrays.fill(posizioniConsonanti, -1); for (int j = 0; j < posizioniConsonanti.length; j++) { - for (int i = posizioniConsonanti[j]; i < caratteriCognome.length && !exit; i++) { + for (int i = (posizioniConsonanti[j] == -1 ? 0 : posizioniConsonanti[j]); i < caratteriCognome.length && !exit; i++) { if (GestisciStringhe.isConsonante(caratteriCognome[i])) { exit = true; posizioniConsonanti[j + 1] = i; @@ -114,18 +116,19 @@ public class GestisciCodiceFiscale { ritorno[0] = posizioniConsonanti[1]; ritorno[1] = posizioniConsonanti[2]; ritorno[2] = posizioniConsonanti[3]; + ritorno[3] = posizioniConsonanti[4]; return ritorno; } - static char[] trovaPrimaVocale(char[] caratteriCognome) { + static char[] trovaPrimaVocale(char[] caratteri) { boolean exit = false; char[] ritorno = new char[2]; - for (int i = 0; i < caratteriCognome.length && !exit; i++) { - if (GestisciStringhe.isVocale(caratteriCognome[i])) { + for (int i = 0; i < caratteri.length && !exit; i++) { + if (GestisciStringhe.isVocale(caratteri[i])) { exit = true; - ritorno[0] = caratteriCognome[i]; + ritorno[0] = caratteri[i]; ritorno[1] = (char) i; } } @@ -161,14 +164,25 @@ public class GestisciCodiceFiscale { } static String CalcolaSecondaTerna(String nome) { + String ritorno; for (String carattere : CARATTERI_DA_RIMUOVERE) { nome = GestisciStringhe.rimuoviCarattere(nome, carattere); } nome = nome.toLowerCase(); - } + char[] caratteriNome = nome.toCharArray(); + int[] posizioniConsonanti = trovaConsonanti(nome); + if (posizioniConsonanti[3] == -1) { + ritorno = Character.toString(caratteriNome[posizioniConsonanti[0]]) + + Character.toString(caratteriNome[posizioniConsonanti[1]]) + + Character.toString(caratteriNome[posizioniConsonanti[2]]); + } + + return ritorno; + } + static String CalcolaSettimoOttavo(Date dataNascita) { }