![JAR search and dependency download from the Maven repository](/logo.png)
sogei.utility.UCheckNum Maven / Gradle / Ivy
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";}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy