sogei.utility.UCheckNum Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of yadaweb Show documentation
Show all versions of yadaweb Show documentation
Some useful tasks for the Yada Framework
package sogei.utility;
/**
* Classe che implementa e svolge l'algoritmo di controllo di validità della partita iva
* e del codice fiscale delle persone non fisiche confrontando anche il valore del check-digit
* la classe restituisce un codice di ritorno che può assumere dei valori predeterminati
*
* Downloaded from http://www.agenziaentrate.gov.it/wps/content/Nsilib/Nsi/Home/CosaDeviFare/Richiedere/Codice+fiscale+e+tessera+sanitaria/Richiesta+TS_CF/SchedaI/Programma+correttezza+formale+CF/
* @author Sogei S.p.A.
*/
public class UCheckNum {
private String strCfNum;
private int pintCodUff;
/**
* Costruttore parametrico che inizializza l'oggetto con la stringa che gli viene passata come parametro
*/
public UCheckNum (String s ) {
strCfNum = s;
}
/**
* Metodo che gestisce il caso di una partita iva o di un codice fiscale di una persona non fisica
* @return char
* @param p java.lang.String
*/
public String cfNum (String p ) {
String strRetcode = null;
if (Integer.parseInt(p.substring(0,7)) < 8000000)
{strRetcode = "2";} //partita iva o codice fiscale delle p.n.f.
else if (pintCodUff > 95)
{strRetcode = "N";} //codice ufficio errato per c.f. delle p.n.f.
else
{strRetcode = "5";} //c.f. p.n.f. non contribuenti iva
if ((controlCfNum(p.substring(0,11)) == false) && (strRetcode == "2" ))
{strRetcode = "Q";} //check-digit errato
else if (controlCfNum(p.substring(0,11)) == false)
{strRetcode = "T";} //check-digit errato
return strRetcode;
}
/**
* Metodo pubblico di codifica del return code che acquisisce una stringa contenente un solo carattere
* al quale corrisponde una stringa di dettaglio sul codice di ritorno
*
*/
public String codificaRetCodeCfNum ( char chrValore ) {
String strRetcode = null; //codice di ritorno
switch(chrValore) // viene attribuito ad ogni valore ricevuto un significato
{
case '0':
strRetcode = "NUMERO DI CODICE FISCALE DEFINITIVO";
break;
case '1':
strRetcode = "NUMERO DI CODICE FISCALE PROVVISORIO ASSEGNATO D'UFFICIO (DU.74 DU.75 101.75)";
break;
case '2':
strRetcode = "NUMERO DI CODICE FISCALE DELLE P.N.F. OPPURE NUMERO DI PARTITA I.V.A.";
break;
case '3':
strRetcode = "NUMERO DI CODICE FISCALE PROVVISORIO ASSEGNATO DALLE INTENDENZE DI FINANZE";
break;
case '4':
strRetcode = "NUMERO DI CODICE FISCALE PROVVISORIO ASSEGNATO DALLE IMPOSTE DIRETTE";
break;
case '5':
strRetcode = "NUMERO DI CODICE FISCALE DELLE P.N.F. NON CONTRIBUENTI I.V.A.";
break;
case '6':
strRetcode = "NUMERO DI CODICE FISCALE DEFINITIVO P.F. SOPRAELEVATA DI OMOCODICE";
break;
case 'A':
strRetcode = "NUMERO DI CODICE FISCALE DEFINITIVO CON CHECK DIGIT ERRATO";
break;
case 'B':
strRetcode = "NUMERO DI CODICE FISCALE DEFINITIVO FORMALMENTE ERRATO";
break;
case 'I':
strRetcode = "NUMERO DI CODICE FISCALE A 11 CIFRE NON ALLINEATO";
break;
case 'L':
strRetcode = "NUMERO DI CODICE FISCALE A 11 CIFRE NON NUMERICO";
break;
case 'M':
strRetcode = "NUMERO DI CODICE FISCALE A 11 CIFRE AVENTE LE PRIME 7 CIFRE A ZERO";
break;
case 'N':
strRetcode = "NUMERO DI CODICE FISCALE A 11 CIFRE CON NUMERO DI CODICE UFFICIO ERRATO";
break;
case 'O':
strRetcode = "NUMERO DI CODICE FISCALE PROVVISORIO ASSEGNATO D'UFFICIO AVENTE PROGRESSIVO NUMERICO NON AMMISSIBILE (FUORI RANGE)";
break;
case 'P':
strRetcode = "NUMERO DI CODICE FISCALE PROVVISORIO ASSEGNATO D'UFFICIO (DU.75 101.75) CON CHECK DIGIT ERRATO";
break;
case 'Q':
strRetcode = "NUMERO DI CODICE FISCALE DELLE P.N.F. OPPURE NUMERO DI PARTITA I.V.A. CON CHECK DIGIT ERRATO";
break;
case 'R':
strRetcode = "NUMERO DI CODICE FISCALE PROVVISORIO ASSEGNATO DALLE II.FF. CON CHECK DIGIT ERRATO";
break;
case 'S':
strRetcode = "NUMERO DI CODICE FISCALE PROVVISORIO ASSEGNATO DALLE II.DD. CON CHECK DIGIT ERRATO";
break;
case 'T':
strRetcode = "NUMERO DI CODICE FISCALE DELLE P.N.F. NON CONTRIBUENTI I.V.A. CON CHECK DIGIT ERRATO";
break;
default:
break;
}
return strRetcode;
}
/**
* Metodo che esegue sulla stringa partita iva il controllo sul check-digit calcolando
* il complemento a dieci dell'ultimo carattere a destra
*/
public boolean controlCfNum (String s) {
Integer intAppoggio;
int pintAppo;
int pintUltimoCarattere;
int pintTotale = 0;
//somma dei valori attribuiti alle cifre pari
for (int i=1; i<11; i+=2)
{
String strElem = getCfNum().substring(i,i+1);
intAppoggio = Integer.valueOf(strElem); //da una singola cifra della stringa passo ad un integer
pintAppo = (intAppoggio.intValue())*2; //passaggio ad un intero per moltiplicarlo
String strS2 = String.valueOf(pintAppo); // passo di nuovo a stringa per dividerla in due parti senza utilizzare un array
for (int j=0; j 0) && (Integer.parseInt(strCfNum.substring(0,7)) < 273961))
{return "1";}
if ((Integer.parseInt(strCfNum.substring(0,7)) > 0400000) && (Integer.parseInt(strCfNum.substring(0,7)) < 1072480 ) ||
(Integer.parseInt(strCfNum.substring(0,7)) > 1500000) && (Integer.parseInt(strCfNum.substring(0,7)) < 1828637 ) ||
(Integer.parseInt(strCfNum.substring(0,7)) > 2000000) && (Integer.parseInt(strCfNum.substring(0,7)) < 2054096 ))
{ if (controlCfNum(strCfNum))
{return "1";}
else
{return "P";}
}
else
{return "O";}
}
else if (pintCodUff == 999)
{
return cfNum(strCfNum);
}
else if (((pintCodUff > 0) && (pintCodUff < 101)) || ((pintCodUff > 119) && (pintCodUff < 122))||(pintCodUff == 888))
{
return cfNum(strCfNum);
}
else if ((pintCodUff > 150) && (pintCodUff < 246))
{
if (controlCfNum(strCfNum)) //controllo sul check digit
{return "3";}
else
{return "R";}
}
else if ((pintCodUff > 300) && (pintCodUff < 767))
{ if (controlCfNum(strCfNum.substring(0,11)))
{return "4";}
else
{return "S";}
}
else if ((pintCodUff > 899) && (pintCodUff < 951))
{ if (controlCfNum(strCfNum.substring(0,11)))
{return "4";}
else
{return "S";}
}
else
{return "N";}
}
}