/* * 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.text.SimpleDateFormat; 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) { // non c'è la seconda vocale 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) { // non c'è la quarta consonante if (posizioniConsonanti[2] == -1) { // non c'è la terza consonante /* * 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) { // non c'è la seconda consonante ritorno = quartoQuintoSestoCasoNome(caratteriNome, primaVocale, posizionePrimaVocale, posizioniConsonanti[0]); } 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 quartoQuintoSestoCasoNome(char[] caratteriNome, char primaVocale, int posizionePrimaVocale, int primaConsonante) { String ritorno; int secondaVocale = trovaSecondaVocale(caratteriNome, posizionePrimaVocale); if (secondaVocale == -1) { // non c'è la seconda vocale ritorno = Character.toString(caratteriNome[primaConsonante]) + Character.toString(primaVocale) + Character.toString('x'); } else { if (primaConsonante == -1) { ritorno = Character.toString(primaVocale) + Character.toString(secondaVocale) + Character.toString('x'); } else { ritorno = Character.toString(caratteriNome[primaConsonante]) + Character.toString(primaVocale) + Character.toString(secondaVocale); } } return ritorno; } static String CalcolaSettimoOttavo(Date dataNascita) { final String PATTERN = "yyyy"; SimpleDateFormat sdf = new SimpleDateFormat(PATTERN); char[] data = sdf.format(dataNascita).toCharArray(); String ritorno = Character.toString(data[2]) + Character.toString(data[3]); return ritorno; } static String CalcolaNono(Date dataNascita) { final String[][] TABELLA_CONVERSIONE_MESE = { { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" }, { "a", "b", "c", "d", "e", "h", "l", "m", "p", "r", "s", "t" } }; final String PATTERN = "MM"; SimpleDateFormat sdf = new SimpleDateFormat(PATTERN); int mese = Integer.parseInt(sdf.format(dataNascita)); boolean exit = false; String ritorno = ""; for (int c = 0; c < TABELLA_CONVERSIONE_MESE[0].length && !exit; c++) { if (mese == Integer.parseInt(TABELLA_CONVERSIONE_MESE[0][c])) { ritorno = TABELLA_CONVERSIONE_MESE[1][c]; exit = true; } } return ritorno; } static String CalcolaDecimoUndicesimo(Date dataNascita, String sesso) { final String PATTERN = "dd"; SimpleDateFormat sdf = new SimpleDateFormat(PATTERN); int giorno = Integer.parseInt(sdf.format(dataNascita)); String ritorno; if (sesso.equals("f")) { ritorno = Integer.toString(giorno + 40); } else { ritorno = Integer.toString(giorno); } return ritorno; } static String CalcolaFrom12To15(String luogoNascita) { //API per i codici del catasto String ritorno = ""; if (luogoNascita.equals("varese")) { ritorno = "L682"; } return ritorno; } static String CalcolaSedicesimo() { char ritorno = (char) (65 + (int) (Math.random() * (91 - 65))); return Character.toString(ritorno); } }