Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package inputCodFisc;
- public class CodiceFiscale {
- private static char[] mapMese = "ABCDEHLMPRST".toCharArray();
- private static char[] vocali = "aeiou".toCharArray();
- private static char[] mapPari="ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
- private static char[] alfabeto=mapPari;
- private static char[] mapDisp ="BAKPLCQDREVOSFTGUHMINJWZYX".toCharArray();
- private static String[] mapComuniA= {"roma","rimini","bologna"};
- private static String[] mapComuniB= {"H501","H294","A994"};
- public static String generaCodiceFiscale(String[] args) {
- String nome,cognome,sesso,data,comune;
- //suddivido i parametri
- cognome=args[0];
- nome=args[1];
- data=args[2];
- sesso=args[3];
- comune=args[4];
- String tempCF;
- tempCF= (getCognome(cognome)+
- getNome(nome)+
- getData(data,sesso)+
- getComune(comune)).toUpperCase();
- tempCF+=getCtrl(tempCF);
- return tempCF;
- }
- //metodo per recuperare le lettere corrispondenti al cognome
- //per comodità creo una stringa con tutte le consonanti, tutte le vocali, 3 "x" finali
- //e restistuisco le prime 3 lettere della stringa
- private static String getCognome(String cognome) {
- String temp="";
- //prendo le consonanti
- temp+=getLettere(cognome,'c');
- //prendo le vocali
- temp+=getLettere(cognome,'v');
- //aggiungo le "x"
- temp+="xxx";
- //restituisco le prime 3 lettere
- return temp.substring(0,3);
- }
- //metodo per recuperare le lettere corrispondenti al nome
- //se riesco a recuperare 4 consonanti restituisco quelle corrette altrimenti
- //procedo come con il cognome
- private static String getNome(String nome) {
- String temp="";
- //prendo le consonanti
- temp+=getLettere(nome,'c');
- //restituisco le lettere se ho abbastanza consonanti
- if(temp.length()>=4){
- return ""+temp.charAt(0)+temp.charAt(2)+temp.charAt(3);
- }
- //prendo le vocali
- temp+=getLettere(nome,'v');
- //aggiungo le "x"
- temp+="xxx";
- //restituisco le prime 3 lettere
- return temp.substring(0,3);
- }
- //metodo per recuperare le lettere corrispondenti alla data di nascita
- //secondo il formato giorno/mese/anno, con controlla la correttezza della data
- private static String getData(String data, String sesso){
- String temp="";
- //suddivido la data per giorno/mese/ann0
- String[] gma= data.split("/");
- //ottengo il giorno (calcolando se è femmina) e il mese in formato numerico
- int giorno=Integer.parseInt(gma[0]);
- if(sesso.equals("f")) giorno+=40;
- int mese=Integer.parseInt(gma[1]);
- temp+= gma[2].substring(2)+ //le ultime 2 cifre dell'anno
- mapMese[mese-1]+ //lettera corrispondente al mese (indice diminuito di 1 perchè i mesi iniziano da 1 invece che 0)
- giorno; //il giorno, già calcolato se femmina
- return temp;
- }
- //metodo per recuperare le lettere corrispondenti al comune
- //effettuo il controllo solo per i comuni indicati come esempio nelle slide
- private static String getComune(String comune){
- for(int i=0;i<mapComuniA.length;i++){
- if(comune.equals(mapComuniA[i])){
- return mapComuniB[i];
- }
- }
- System.out.println("Il comune inserito non è valido");
- System.exit(1);
- return null; //non ci arriva mai ma se non lo metto non compila
- }
- //metodo per la lettera di controllo
- private static char getCtrl(String tempCF){
- //sostituisco le cifre
- String primaPassata="";
- char current;
- int k;
- for(int i=0;i<tempCF.length();i++){
- current=tempCF.charAt(i);
- if(Character.isDigit(current)){
- k=Character.getNumericValue(current);
- primaPassata+=alfabeto[k];
- continue;
- }
- primaPassata+=current;
- }
- //calcolo le cifre e sommo
- int secondaPassata=0;
- for(int i=0;i<primaPassata.length();i++){
- //le lettere "dispari" trovano in posizioni "pari"
- if((i%2)==0){
- secondaPassata+=getNumero(primaPassata.charAt(i),'d');
- }else{
- secondaPassata+=getNumero(primaPassata.charAt(i),'p');
- }
- }
- //numero della lettera di controllo
- int numero=secondaPassata%26;
- //lettera corrispondente
- return alfabeto[numero];
- }
- //metodo per stabilire se è una vocale
- private static boolean isVocale(char c){
- for(int i=0;i<vocali.length;i++){
- if(c==vocali[i]) return true;
- }
- return false;
- }
- //metodo per recuperare vocali e consonanti da una stringa
- private static String getLettere(String in, char op){
- String temp="";
- char current;
- for(int i=0;i<in.length();i++){
- current=in.charAt(i);
- if(!isVocale(current)&&(op=='c')) temp+=current;
- if(isVocale(current)&&(op=='v')) temp+=current;
- }
- return temp;
- }
- //metodo per recuperare il valore della lettera
- private static int getNumero(char in, char op){
- char[] map=(op=='p')?mapPari:mapDisp;
- for(int i=0;i<map.length;i++){
- if(in==map[i]) return i;
- }
- return 0;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement