/* * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template */ package appComune; import java.util.Arrays; import java.util.Date; import utility.GestisciStringhe; /** * * @author Verde */ public class GestisciCodiceFiscale { static final String[] CARATTERI_DA_RIMUOVERE = { " ", "'", "`" }; public static String CalcolaCodiceFiscale(String nome, String cognome, Date dataNascita, String luogo, String sesso) { } static String CalcolaPrimaTerna(String cognome) { String ritorno; for (String carattere : CARATTERI_DA_RIMUOVERE) { cognome = GestisciStringhe.rimuoviCarattere(cognome, carattere); } cognome = cognome.toLowerCase(); char[] caratteriCognome = cognome.toCharArray(); int[] posizioniConsonanti = trovaConsonanti(cognome); if (posizioniConsonanti[0] == -1) { // non è stata trovata la prima consonante, ovvero non ce ne sono ritorno = quintoCasoCognome(caratteriCognome); } else { 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] == -1) { // non è stata trovata la seconda consonante, AKA l'array nella // penultima // posizione // ha valore di default int secondaVocale = trovaSecondaVocale(caratteriCognome, posizionePrimaVocale); if (secondaVocale == -1) { ritorno = Character.toString(caratteriCognome[posizioniConsonanti[0]]) + Character.toString(primaVocale) + Character.toString('x'); } else { ritorno = Character.toString(caratteriCognome[posizioniConsonanti[0]]) + Character.toString(primaVocale) + Character.toString(secondaVocale); } } else { ritorno = Character.toString(caratteriCognome[posizioniConsonanti[0]]) + Character.toString(caratteriCognome[posizioniConsonanti[1]]) + Character.toString(primaVocale); } } else { ritorno = Character.toString(caratteriCognome[posizioniConsonanti[0]]) + Character.toString(caratteriCognome[posizioniConsonanti[1]]) + Character.toString(caratteriCognome[posizioniConsonanti[2]]); } } /* * for (int i = 0; i < caratteriCognome.length && !exit; i++) { * if (GestisciStringhe.isConsonante(caratteriCognome[i])) { * exit = true; * posizioniConsonanti[0] = i; * } * } * * for (int i = posizioniConsonanti[0]; i < caratteriCognome.length && !exit; * i++) { * if (GestisciStringhe.isConsonante(caratteriCognome[i])) { * exit = true; * posizioniConsonanti[1] = i; * } * } * * for (int i = posizioniConsonanti[1]; i < caratteriCognome.length && !exit; * i++) { * if (GestisciStringhe.isConsonante(caratteriCognome[i])) { * exit = true; * posizioniConsonanti[2] = i; * } * } */ return ritorno; } static int[] trovaConsonanti(String cognome) { // trova le prime 4 consonanti boolean exit = false; char[] caratteriCognome = cognome.toCharArray(); 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] == -1 ? 0 : posizioniConsonanti[j]); i < caratteriCognome.length && !exit; i++) { if (GestisciStringhe.isConsonante(caratteriCognome[i])) { exit = true; posizioniConsonanti[j + 1] = i; } } } ritorno[0] = posizioniConsonanti[1]; ritorno[1] = posizioniConsonanti[2]; ritorno[2] = posizioniConsonanti[3]; ritorno[3] = posizioniConsonanti[4]; return ritorno; } static char[] trovaPrimaVocale(char[] caratteri) { boolean exit = false; char[] ritorno = new char[2]; for (int i = 0; i < caratteri.length && !exit; i++) { if (GestisciStringhe.isVocale(caratteri[i])) { exit = true; ritorno[0] = caratteri[i]; ritorno[1] = (char) i; } } return ritorno; } static int trovaSecondaVocale(char[] caratteriCognome, int posizionePrimaVocale) { int ritorno = -1; boolean exit = false; for (int i = posizionePrimaVocale; i < caratteriCognome.length && !exit; i++) { if (GestisciStringhe.isVocale(caratteriCognome[i])) { exit = true; ritorno = caratteriCognome[i]; } } return ritorno; } static String quintoCasoCognome(char[] caratteriCognome) { char primaVocale = trovaPrimaVocale(caratteriCognome)[0]; int posizionePrimaVocale = trovaPrimaVocale(caratteriCognome)[1]; char secondaVocale = (char) trovaSecondaVocale(caratteriCognome, posizionePrimaVocale); String ritorno; ritorno = Character.toString(primaVocale) + Character.toString(secondaVocale) + Character.toString('x'); return ritorno; } 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) { if (posizioniConsonanti[2] == -1) { /* * O grandi divinità del codice, fate in modo che ogni nome abbia almeno una * vocale */ char primaVocale = trovaPrimaVocale(caratteriNome)[0]; int posizionePrimaVocale = trovaPrimaVocale(caratteriNome)[1]; if (posizioniConsonanti[1] == -1) { int secondaVocale = trovaSecondaVocale(caratteriNome, posizionePrimaVocale); ritorno = Character.toString(caratteriNome[posizioniConsonanti[0]]) + Character.toString(primaVocale) + Character.toString(secondaVocale); } else { ritorno = Character.toString(caratteriNome[posizioniConsonanti[0]]) + Character.toString(caratteriNome[posizioniConsonanti[1]]) + Character.toString(primaVocale); } } else { ritorno = Character.toString(caratteriNome[posizioniConsonanti[0]]) + Character.toString(caratteriNome[posizioniConsonanti[1]]) + Character.toString(caratteriNome[posizioniConsonanti[2]]); } } else { ritorno = Character.toString(caratteriNome[posizioniConsonanti[0]]) + Character.toString(caratteriNome[posizioniConsonanti[2]]) + Character.toString(caratteriNome[posizioniConsonanti[3]]); } return ritorno; } static String CalcolaSettimoOttavo(Date dataNascita) { } static String CalcolaNono(Date dataNascita) { } static String CalcolaDecimoUndicesimo(Date dataNascita, String sesso) { } static String CalcolaFrom12To15(String luogoNascita) { } static String CalcolaSedicesimo() { } }