231 lines
8.4 KiB
Java
231 lines
8.4 KiB
Java
/*
|
|
* 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() {
|
|
|
|
}
|
|
} |