Where allowed to run:
|
Parameters Examples Error messages |
Permette di verificare la validita' formale di un codice fiscale recuperando in variabili i flag di risposta.
Permette di verificare la validita' formale di un codice fiscale tramite un messaggio di risposta in joblog.
Nota: Il programma RPGLE JCODFISD costituisce il cuore dei comandi JCODFIS e JCODFISI ed e' disponibile anche per la chiamata con gli stessi parametri del comando JCODFIS con una tradizionale call o con la funzione sql JCODFIS che restituisce un campo di ritorno riassuntivo dei flag. In realta', per i comandi qui documentati, non si prevede un uso diretto produttivo. Essi sono tuttavia il miglior punto di ingresso per questa documentazione e per il test del programma cuore.
Nota: Il testo d'aiuto della funzione SQL JCODFIS e' consultabile sia dal video comandi che dal video SQL con la chiamata: CALL NERONI2/JCODFIS
Riguardo alla forma del codice fiscale:
* Il codice fiscale puo' essere di due tipi. * Il primo di 16 caratteri e' quello definitivo * delle persone fisiche. * Il secondo di 11 caratteri si riferisce al provvisorio * delle persone fisiche e al provvisorio e definitivo delle * persone non fisiche. * L'algoritmo di controllo della forma a 11 caratteri * e' naturalmente il medesimo usato per la partita iva, * visto che alle persone giuridiche viene assegnato * come codice fiscale proprio la partita iva, * anche se poi la partita iva cambia se la persona * giuridica cambia territorio di competenza dell'ufficio iva * mentre il codice fiscale resta uguale. * * Il programma calcola il carattere di controllo del codice * fiscale ricevuto e lo confronta con il carattere di controllo * contenuto nel codice stesso.
Si riporta il testo che ha generato il presente tool:
* D.M.23 dicembre 1976: Sistemi di codificazione dei * soggetti da iscrivere all'anagrafe tributaria (Suppl. * ord. alla Gazzetta Ufficiale n.345 del 29 dicembre * 1976). * Art. 1 * Sistemi di codificazione * Le persone fisiche, le persone giuridiche e le societa', * associazione ed altre organizzazioni di persone o di * beni prive di personalita' giuridica sono iscritte all'ana- * grafe tributaria secondo appositi sistemi di codificazione. * Art. 2 * Numero di codice fiscale delle persone fisiche * Il numero di codice fiscale delle persone fisiche e' * costituito da una espressione alfanumerica di sedici * caratteri. * I primi quindici caratteri sono indicativi dei dati a- * nagrafici di ciascun soggetto secondo l'ordine seguente: * tre caratteri alfabetici per il cognome; * tre caratteri alfabetici per il nome; * due caratteri numerici per l'anno di nascita; * un carattere alfabetico per il mese di nascita; * due caratteri numerici per il giorno di nascita ed il * sesso; * quattro caratteri (uno alfabetico e tre numerici) per * il comune italiano o per lo Stato estero di nascita. * Il sedicesimo carattere, alfabetico, ha la funzione di * controllo. * Art. 3 * Caratteri indicativi del cognome * I cognomi che risultano composti da piu' parti o co- * munque separati od interrotti, vengono considerati * come se fossero scritti secondo un'unica ed ininterrot- * ta successione di caratteri. * Per i soggetti di sesso femminile coniugati si prende * in considerazione soltanto il cognome da nubile. * Se il cognome contiene tre o piu' consonanti, i tre * caratteri da rilevare sono, nell'ordine, la prima, la se- * conda e la terza consonante. * Se il cognome contiene due consonanti, i tre carat- * teri da rilevare sono, nell'ordine, la prima e la seconda * consonante e la prima vocale. * Se il cognome contiene una consonante e due voca- * li, si rilevano, nell'ordine, quella consonante e quindi la * prima e la seconda vocale. * Se il cognome contiene una consonante e una voca- * le, si rilevano la consonante e la vocale, nell'ordine, e * si assume come terzo carattere la lettera x(ics). * Se il cognome e' costituito da due sole vocali, esse si * rilevano, nell'ordine, e si assume come terzo carattere * la lettera x(ics). * Art. 4 * Caratteri indicativi del nome * I nomi doppi, multipli o comunque composti, ven- * gono considerati come scritti per esteso in ogni loro * parte e secondo un'unica ed ininterrotta successione di * caratteri. * Se il nome contiene quattro o piu' consonanti i tre * caratteri da rilevare sono, nell'ordine, la prima, la ter- * za e la quarta consonante. * Se il nome contiene tre consonanti, i tre caratteri da * rilevare sono, nell'ordine, la prima, la seconda e la ter- * za consonante. * Se il nome contiene due consonanti, i tre caratteri * da rilevare sono, nell'ordine, la prima e la seconda * consonante e la prima vocale. * Se il nome contiene una consonante e due vocali, i * tre caratteri da rilevare sono, nell'ordine, quella conso- * nante e quindi la prima e la seconda vocale. * Se il nome contiene una consonante e una vocale, si * rilevano la consonante e la vocale, nell'ordine, e si as- * sume come terzo carattere la lettera x(ics). * Se il nome e' costituito da due sole vocali, esse si ri- * levano nell'ordine, e si assume come terzo carattere la * lettera x(ics). * Art. 5 * Data, sesso e luogo di nascita * I due caratteri numerici indicativi dell'anno di na- * scita sono, nell'ordine, la cifra delle decine e la cifra * dell'unita' dell'anno stesso. * Il carattere alfabetico corrisponde al mese di na- * scita e' quello stabilito per ciascun mese nella seguente * tabella: * Gennaio = A Luglio = L * Febbraio = B Agosto = M * Marzo = C Settembre = P * Aprile = D Ottobre = R * Maggio = E Novembre = S * Giugno = H Dicembre = T * I due caratteri numerici indicativi del giorno di na- * scita e del sesso vengono determinati nel modo se- * guente: * per i soggetti maschili il giorno di nascita figura in- * variato, con i numeri da uno a trentuno, facendo pre- * cedere dalla cifra zero i giorni del mese dall'uno al no- * ve. Per i soggetti femminili il giorno di nascita viene * aumentato di quaranta unita', per cui esso figura con i * numeri da quarantuno a settantuno. * I quattro caratteri alfanumerici indicativi del comu- * ne italiano o dello Stato estero di nascita, costituiti da * un carattere alfabetico seguito da tre caratteri numeri- * ci, si rilevano rispettivamente dal volume "Codice dei * comuni d'Italia" o dal volume "Codice degli Stati este- * ri" redatti a cura della Direzione generale del catasto * e dei servizi tecnici erariali * All'aggiornamento dei volumi di cui al precedente * comma provvede la Direzione generale del catasto e * dei servizi tecnici erariali * Art. 6 * Persone fisiche con identica espressione alfanumerica * Quando l'espressione alfanumerica relativa ai primi * quindici caratteri del codice risulta comune a due o * tre soggetti, si provvede a differenziarla per ciascuno * dei soggetti successivi al primo soggetto codificato. A * tal fine, si effettuano, nell'ambito di sette caratteri nu- * merici contenuti nel codice, sistematiche sostituzioni * di una o piu' cifre a partire da quella di destra, con cor- * rispondenti caratteri alfabetici secondo la seguente ta- * bella: * 0 = L 4 = Q 7 = T * 1 = M 5 = R 8 = U * 2 = N 6 = S 9 = V * 3 = P * Art. 7 * Carattere alfabetico di controllo * Il sedicesimo carattere ha funzione di controllo del * l'esatta trascrizione dei primi quindici caratteri. Esso * viene determinato nel modo seguente: ciascuno degli * anzidetti quindici caratteri, a seconda che occupi posi- * zione di ordine pari o posizione di ordine dispari, viene * convertito in un valore numerico in base alle corri- * spondenze indicate rispettivamente ai successivi punti * 1) e 2). * 1) Per la conversione dei sette caratteri con posi- * zione di ordine pari: * A o zero = zero O = 14 * B o 1 = 1 P = 15 * C o 2 = 2 Q = 16 * D o 3 = 3 R = 17 * E o 4 = 4 S = 18 * F o 5 = 5 T = 19 * G o 6 = 6 U = 20 * H o 7 = 7 V = 21 * I o 8 = 8 W = 22 * J o 9 = 9 X = 23 * K = 10 Y = 24 * L = 11 Z = 25 * M = 12 _ _ * N = 13 _ _ * 2) Per la conversione degli otto caratteri con posi- * zione di ordine dispari: * A o zero = 1 O = 11 * B o 1 = 0 P = 3 * C o 2 = 5 Q = 6 * D o 3 = 7 R = 8 * E o 4 = 9 S = 12 * F o 5 = 13 T = 14 * G o 6 = 15 U = 16 * H o 7 = 17 V = 10 * I o 8 = 19 W = 22 * J o 9 = 21 X = 25 * K = 2 Y = 24 * L = 4 Z = 23 * M = 18 _ _ * N = 20 _ _ * I valori numerici cosi determinati vengono addizio- * nati e la somma si divide per numero 26. * Il carattere di controllo si ottiene convertendo il re- * sto di tale divisione nel carattere alfabetico ad esso * corrispondente nella sottoindicata tabella: * zero = A 9 = J 18 = S * 1 = B 10 = K 19 = T * 2 = C 11 = L 20 = U * 3 = D 12 = M 21 = V * 4 = E 13 = N 22 = W * 5 = F 14 = O 23 = X * 6 = G 15 = P 24 = Y * 7 = H 16 = Q 25 = Z * 8 = I 17 = R _ _ * Art. 8 * Numero di codice fiscale dei soggetti diversi dalle per- * sone fisiche * Il numero di codice fiscale dei soggetti diversi dalle * persone fisiche e' costituito da una espressione numeri- * ca di undici cifre. Le prime sette cifre rappresentano il * numero di matricola del soggetto nell'ambito della * provincia in cui ha sede l'ufficio che attribuisce il nu- * mero di codice fiscale; esso si ottiene, per ciascun sog- * getto, incrementando di una unita' il numero di matri- * cola stabilito per il soggetto che immediatamente lo * precede. * Le tre cifre dall'ottava alla decima rappresentano il * codice identificativo della provincia in cui ha sede l'uf- * ficio che attribuisce il numero di codice fiscale. * L'undicesimo carattere ha funzione di controllo del * l'esatta trascrizione delle prime dieci cifre. * Art. 9 * Carattere numerico di controllo * Il carattere di controllo viene determinato nel modo * seguente; * si sommano i valori di ciascuna delle cinque cifre di * ordine dispari partendo da sinistra; * si raddoppia ogni cifra di ordine pari e se il risulta- * to e' un numero di due cifre, esso si riduce ad una sola * sommando la cifra relativa alle decina e quella relativa * alle unita'; si sommano quindi tutti i precedenti risulta- * ti; * si determina il totale delle due somme di cui sopra; * si sottrae da dieci la cifra relativa alle unita' del pre- * cedente totale. Il carattere di controllo e' la cifra relati- * va alle unita' del risultato. * Art. 10 * Numero di codice fiscale provvisorio * L'Amministrazione finanziaria puo' attribuire un * numero di codice fiscale provvisorio. * Il numero di codice fiscale provvisorio delle persone * fisiche ha struttura e composizione uguali a quelle di * al precedente art.8. Le prime sette cifre rappresen- * tano il numero di matricola del soggetto; le cifre dal * l'ottava alla decima identificano l'ufficio che attribui- * sce il numero di codice fiscale provvisorio e l'undicesi- * ma e' il carattere di controllo, che viene determinato * con le modalita' di cui all'art.9. * Ha inoltre validita' di numero di codice fiscale prov- * visorio il numero di codice fiscale attribuito a soggetti * persone fisiche, avente struttura e composizione con- * formi agli artt. da 2 a 7 del presente decreto, in corri- * spondenza del quale siano errati uno o piu' dati ana- * grafici che concorrono alla formazione del numero di * codice fiscale stesso. Si applicano in tal caso le dispo- * sizione di cui dagli artt.5 secondo comma, e 19 del * D.P.R. 2 novembre 1976 n.784. * Il numero di codice fiscale provvisorio dei soggetti * diversi dalle persone fisiche ha struttura uguale a quel- * la del numero di codice fiscale definitivo.
Top |
Keyword | Description | Choices | Notes |
---|---|---|---|
CODFIS | Codice fiscale | Character value | Required, Positional 1 |
FISICA | Persona fisica (1/0) 1 | Character value | Optional, Positional 2 |
OMOCOD | Omocodice (1/0) 1 | Character value | Optional, Positional 3 |
SINTAX | Errore sintassi (1/0) 1 | Character value | Optional, Positional 4 |
CHKDIG | Errore check digit (1/0) 1 | Character value | Optional, Positional 5 |
Top |
Codice fiscale da verificare.
Il valore e' obbligatorio.
Forme permesse:
Nella forma CogNomAaMGgComuK dove Cog = Acronimo del Cognome Nom = Acronimo del Nome Aa = Anno di nascita di due cifre M = Mese di nascita codificato con una lettera Gg = Giorno di nascita + 40 se sesso femminile Comu = Codice del comune italiano o della nazione estera di nascita K = Carattere di controllo
Nella forma ProgresPrvK dove Progres = Progressivo di assegnazione dentro l'ufficio Prv = Codice dell'ufficio che assegna il progressivo K = Carattere di controllo
Top |
Flag facoltativo restituito in una variabile di 1 carattere. Se acceso, il codice ricevuto e' fiscale di persona fisica. Se spento, e' fiscale di persona giuridica o fiscale provvisorio o partita iva.
Top |
Flag facoltativo restituito in una variabile di 1 carattere. Se acceso, il codice ricevuto e' fiscale di persona fisica afflitto da "omocodia", cioe' contiene una o piu' sostituzioni di lettere con cifre. Le sostituzioni sono operate dall'amministazione finanziaria al momento del rilascio del codice per distinguere tra loro quei soggetti che altrimenti avrebbero la stessa espressione alfanumerica. Se spento, il valore ricevuto non e' afflitto da "omocodia".
Top |
Flag facoltativo restituito in una variabile di 1 carattere. Se acceso, il codice ricevuto contiene un errore di sintassi. Se spento, non contiene un errore di sintassi.
Top |
Flag facoltativo restituito in una variabile di 1 carattere. Se acceso, il codice ricevuto ha l'ultimo carattere ("check digit") diverso da quello atteso in base all'algoritmo ufficiale di controllo. Se spento, il "check digit" e' quello atteso.
Top |
Esempio 1: Pgm CLLE usa comando per verificare codice fiscale
Si abbia il seguente CLLE JCODFIS_X1 che usa tutti i parametri di ritorno del comando JCODFIS.
PGM PARM(&CODFIS) DCL VAR(&CODFIS) TYPE(*CHAR) LEN(16) DCL VAR(&FISICA) TYPE(*CHAR) LEN(1) DCL VAR(&OMOCOD) TYPE(*CHAR) LEN(1) DCL VAR(&SINTAX) TYPE(*CHAR) LEN(1) DCL VAR(&CHKDIG) TYPE(*CHAR) LEN(1) JCODFIS CODFIS(&CODFIS) FISICA(&FISICA) + OMOCOD(&OMOCOD) SINTAX(&SINTAX) + CHKDIG(&CHKDIG) SNDPGMMSG MSG('"' *CAT &CODFIS *CAT '" "' *CAT &FISICA + *CAT &OMOCOD *CAT &SINTAX *CAT &CHKDIG + *CAT '"') ENDPGM
Chiamando il pgm prima con un codice fiscale di persona fisica giusto/errato poi con una partita iva giusta/errata si ottiene il seguente log:
> CALL PGM(JCODFIS_X1) PARM(NRNCLD49H13B730B) "NRNCLD49H13B730B" "1000" > CALL PGM(JCODFIS_X1) PARM(NRNCLD49H13B730x) "NRNCLD49H13B730X" "1001" > CALL PGM(JCODFIS_X1) PARM('02110510134') "02110510134 " "0000" > CALL PGM(JCODFIS_X1) PARM('02110510139') "02110510139 " "0001"
Si osservino le batterie dei flag risultanti.
Esempio 2: Pgm CLLE usa comando per verificare codice fiscale
Si abbia il seguente CLLE JCODFIS_X2 che usa solo un parametro di ritorno del comando JCODFIS.
PGM PARM(&CODFIS) DCL VAR(&CODFIS) TYPE(*CHAR) LEN(16) DCL VAR(&CHKDIG) TYPE(*CHAR) LEN(1) JCODFIS CODFIS(&CODFIS) CHKDIG(&CHKDIG) SNDPGMMSG MSG('"' *CAT &CODFIS *CAT '" "' *CAT &CHKDIG + *CAT '"') ENDPGM
Chiamando il pgm prima con un codice fiscale di persona fisica giusto/errato poi con una partita iva giusta/errata si ottiene il seguente log:
> CALL PGM(JCODFIS_X2) PARM(NRNCLD49H13B730B) "NRNCLD49H13B730B" "0" > CALL PGM(JCODFIS_X2) PARM(NRNCLD49H13B730x) "NRNCLD49H13B730X" "1" > CALL PGM(JCODFIS_X2) PARM('02110510134') "02110510134 " "0" > CALL PGM(JCODFIS_X2) PARM('02110510139') "02110510139 " "1"
Si osservi l'unico flag risultante.
Esempio 3: Uso del comando estemporaneo per verificare un codice fiscale
Chiamando il comando JCODFISI pgm prima con un codice fiscale di persona fisica giusto/errato poi con una partita iva giusta/errata si ottiene il seguente log:
> JCODFISI CODFIS(NRNCLD49H13B730B) CodiceFiscale:"NRNCLD49H13B730B" Fisica:"1" Omonimo:"0" SintaxErr:"0" ChkdigErr:"0" > JCODFISI CODFIS(NRNCLD49H13B730x) CodiceFiscale:"NRNCLD49H13B730X" Fisica:"1" Omonimo:"0" SintaxErr:"0" ChkdigErr:"1" > JCODFISI CODFIS(02110510134) CodiceFiscale:" 02110510134" Fisica:"0" Omonimo:"0" SintaxErr:"0" ChkdigErr:"0" > JCODFISI CODFIS(02110510139) CodiceFiscale:" 02110510139" Fisica:"0" Omonimo:"0" SintaxErr:"0" ChkdigErr:"1"
Si osservino i messaggi risultanti.
Esempio 4: Uso del programma cuore JCODFISD per verificare un codice fiscale mediante CALL
Si riporta uno stralcio del sorgente RPGLE JCODFISDS che esemplifica la chiamata al programma cuore del controllo. Per maggiore dettaglio consultare il sorgente stesso.
* Controlla il codice fiscale. * Riceve il codice fiscale da esaminare in JCFCOD. * Restituisce 1 in JCFFIS se esegue il controllo per * persona fisica. * Restituisce 1 in JCFOMO se durante il controllo per * persona fisica riscontra dalla sintassi trattarsi * di un omonimo. * L'indicazione non viene data se il codice viene * giudicato in errore. * Restituisce 1 in JCFSIN se riscontra errore di sintassi. * Restituisce 1 in JCFCHK se riscontra errore nel carattere * di controllo. * L'indicatore di errore nel carattere di controllo viene * sempre acceso anche per errore di sintassi perché * il carattere di controllo non ha senso in presenza di * un errore di sintassi. C CALL 'JCODFISD' C PARM JCFCOD 16 I Codice fiscale C PARM JCFFIS 1 O Persona fisica C PARM JCFOMO 1 O Omonimo C PARM JCFSIN 1 O Errore sintassi C PARM JCFCHK 1 O Errore chkdig
Il significato dei flag di risposta e' lo stesso che si legge nel testo d'aiuto dei parametri del comando JCODFIS (non JCODFISI). -
Esempio 5: Uso della funzione SQL JCODFIS
Si riporta un adattamento del testo d'aiuto della funzione SQL JCODFIS che usa il programma RPGLE JCODFISD, cuore dell'ambaradan.
Sql function JCODFIS Check fiscal code. Controlla codice fiscale. - La funzione e' stata scritta sulla base delle informazioni trovate nel D.M. 23 dicembre 1976: Sistemi di codificazione dei soggetti da iscrivere all'anagrafe tributaria (Suppl. ord. alla Gazzetta Ufficiale n.345 del 29 dicembre 1976). - La funzione riceve come parametro di 16 caratteri il codice fiscale da verificare. La funzione restituisce un valore di 5 caratteri: OKFIS = Il codice e' formalmente valido e riguarda una persona fisica. OKOMO = Il codice e' formalmente valido e riguarda una persona fisica ma si tratta di un "omocodice" cioe' riguarda un omonimo. OKGIU = Il codice e' formalmente valido e riguarda una persona giuridica. La risposta vale anche per i codici fiscali provvisori di persone fisiche e per le partite iva. ERSIN = Il codice contiene un errore di sintassi. ERCHK = Il codice contiene un carattere di controllo finale diverso da quello calcolato a partire dal resto del codice. - Si riporta un esempio di chiamata sui dati del file di test: SELECT CODFIS, JCODFIS(CODFIS) as OK FROM NERONI2/JCODFIST Si genera il seguente output: Codice OK fiscale 1234567890123456 ERSIN NRNCLD49H13B730B OKFIS NDRDNL52S68C38QK OKOMO 02110510134 OKGIU NRNCL749H13B730B ERSIN CCNPLA50D57C933X ERCHK CCNPLA50D57C933R OKFIS 11111111110 ERCHK 11111111110 ERCHK 11111111111 ERCHK 11111111112 ERCHK 11111111113 ERCHK 11111111114 ERCHK 11111111115 OKGIU 11111111115 OKGIU 11111111115 OKGIU 11111111116 ERCHK 11111111117 ERCHK 11111111118 ERCHK 11111111119 ERCHK - Un secondo, per evidenziare gli errori (iniziano con "E"): SELECT CODFIS, JCODFIS(CODFIS) as OK FROM NERONI2/JCODFIST WHERE CODFIS<>' ' and SUBSTR(JCODFIS(CODFIS), 1, 1)='E' Si genera il seguente output: Codice OK fiscale 1234567890123456 ERSIN NRNCL749H13B730B ERSIN CCNPLA50D57C933X ERCHK 11111111110 ERCHK 11111111110 ERCHK 11111111111 ERCHK 11111111112 ERCHK 11111111113 ERCHK 11111111114 ERCHK 11111111116 ERCHK 11111111117 ERCHK 11111111118 ERCHK 11111111119 ERCHK - La visualizzazione del presente testo e' ottenibile dal video comandi o dal video SQL con: CALL NERONI2/JCODFIS
Il campo di risposta della funzione riunisce il significato dei quattro flag del programma cuore JCODFISD in un unico acronimo mnemonico.
Top |
Messaggi *INFO e *COMP
Messaggi *DIAG seguiti da *ESCAPE CPF0001
Nessun messaggio previsto.
Top |