ESERCIZIO: CODICE FISCALE



Documenti analoghi
ARRAY RESTITUITI DA FUNZIONI

Esercizio 1. Esercizio 1 - Soluzione. Esercizio 1. Esercizio 1 - Soluzione. Esercizio 1 - Soluzione. Fondamenti di Informatica T2 Modulo 2 Lab 1

CODICE FISCALE. Cos'è e a cosa serve

SERVIZI ANAGRAFICI MASSIVI - INTERROGAZIONE SPECIFICHE TECNICHE SERVIZIO SM1.02

TRACCIATO RECORD DI TESTA. Tipo di dato. Codice numerico NU Vale sempre "53" TIPOLOGIA DI INVIO

BOZZA INTERNET del 23/12/2015. Modalità di compilazione per la trasmissione delle Comunicazioni dei dati relativi alle spese funebri

Programmazione Orientata agli Oggetti in Linguaggio Java

Guida a SacramentiWeb 1.2

Corso sul linguaggio Java

8.1 Anagrafica Imprese

Array multidimensionali e stringhe

Esercizi di riepilogo (Fondamenti di Informatica 1 Walter Didimo)

Corso sul linguaggio Java

ALLEGATO B. Specifiche tecniche per la trasmissione telematica Modello INTRA 12

Lezione 6 programmazione in Java

CREAZIONE D IMPRESA 1

Corso sul linguaggio C

Esercizio 1 Liste: calcolo perimetro di un poligono

GESTIONE DEGLI ERRORI

Corso di Laurea Ingegneria Civile Elementi di Informatica. Esercizi. Carla Limongelli. Esercizi 1

ALLEGATO A. Specifiche tecniche per la trasmissione telematica delle Comunicazioni di richiesta delle Dichiarazioni Precompilate 2017

A. Ferrari. informatica. Java basi del linguaggio. Alberto Ferrari Informatica

RELAZIONE SUI CHICCHI DI RISO

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Modalità di compilazione del tracciato telematico per la comunicazione telematica dell indirizzo di posta elettronica certificata

Modello da inviare all'autorità regionale competente

SPECIFICHE TECNICHE ISTANZE DI COLLABORAZIONE VOLONTARIA

MISURE DI SINTESI 54

ALLEGATO A. Specifiche tecniche per la trasmissione telematica Modello FTT

Laboratorio di Programmazione 1 [Java]

Specifiche tecniche per la trasmissione telematica dei dati relativi alle forniture di documenti fiscali

Java: loading dinamico e reflection

ALLEGATO. Specifiche tecniche per la trasmissione telematica dei dati relativi alla comunicazione per la ricezione dei mod.

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

ALLEGATO C. Specifiche tecniche per la trasmissione telematica Modello F24

Addizioni con l abaco Esegui le addizioni, prestando attenzione al cambio, come nell esempio.

Transcript:

ESERCIZIO: CODICE FISCALE Problema: Scrivere un programma che, a partire dai dati anagrafici, calcoli il codice fiscale di una persona. Il C.F. è composto di 5 parti: tre lettere identificative del cognome tre lettere identificative del nome due cifre, una lettera e altre due cifre, indicanti sesso e data di nascita una lettera e tre cifre, indicanti il Comune di nascita una lettera di controllo, calcolata sulla base delle lettere e delle cifre precedenti. 1

ESERCIZIO: CODICE FISCALE Problema: Scrivere un Le programma prime tre consonanti che, a partire (se dai non dati bastano, anagrafici, calcoli le vocali; il codice se non fiscale bastano di ancora, una una X) persona. Esempi: Il C.F. è composto di 5 parti: ROSSI MARIO fi RSS MRA tre lettere identificative del cognome; ROSSI GASTONE fi RSS GTN tre lettere identificative del nome; due cifre, una lettera e altre due cifre, indicanti La sesso prima, e la data terza di e nascita; la quarta consonante una lettera (se e non tre ci cifre, sono indicanti quattro consonanti, il Comune si usano di nascita; le prime tre; se non bastano, si usano le una lettera vocali; di controllo, se non bastano calcolata ancora, sulla una base X) delle lettere e delle cifre precedenti. 2

ESERCIZIO: CODICE FISCALE Problema: Scrivere un programma che, a partire dai dati anagrafici, Anno, calcoli mese e il giorno codice di fiscale nascitadi una persona. Per le donne, giorno aumentato di 40 Mese = A, B, C, D, E, H, L, M, P, R, S, T Il C.F. è composto di 5 parti: tre lettere identificative Esempi: del cognome; tre lettere identificative 01/02/1978 del nome; (maschio) fi 78B01 due cifre, una lettera 25/12/1969 e altre due (femmina) cifre, fi 69T65 indicanti sesso e data di nascita; una lettera e tre cifre, indicanti il Comune di nascita; una lettera di Sigla controllo, che si calcolata trova su apposite sulla base tabelle delle lettere e delle Bologna cifre precedenti. = A944, Reggio E. = H223, etc 3 8276 diverse sigle, inclusi Stati esteri

ESERCIZIO: CODICE FISCALE Problema: Scrivere Cifre 0 un 9 fi programma Lettere A che, J a partire dai dati anagrafici, Lettere di posto calcoli pari il codice (2,4,..) fiscale 0-25 di una persona. Lettere di posto dispari (1,3,&)fi vedi tabella: B A K P L C Q D R E V O S F T G U Il C.F. è composto di 5 parti: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 tre lettere identificative del cognome; H M I N J W Z Y X tre 17 lettere 18 19 identificative 20 21 22 23 24 del 25 nome; due Alla cifre, fine, una si somma lettera tutto e altre e si due prende cifre, il risultato indicanti modulo 26. sesso e data di nascita; una lettera e tre cifre, indicanti il Comune di nascita; una lettera di controllo, calcolata sulla base delle lettere e delle cifre precedenti. 4

ESERCIZIO: CODICE FISCALE Problema: Scrivere Esempio: un Rossi programma Mario, 12/6/76, che, a partire Bologna dai dati anagrafici, calcoli il codice fiscale di una R S S M R A 7 6 H 1 2 A 9 4 4? persona. R S S M R A H G H B C A J E E? Il C.F. 18 è 12 composto 0 6 di 5 parti: 1 0 4 (pari) tre 8 lettere 12 identificative 8 17 17 del 5 cognome; 21 (dispari) tre Totale: lettere 138 identificative mod 26 = 8 fi del Inome; due R S cifre, S M una R A lettera 7 6 e H altre 1 2 due A 9 cifre, 4 4 I indicanti sesso e data di nascita; una lettera e tre cifre, indicanti il Comune di nascita; una lettera di controllo, calcolata sulla base delle lettere e delle cifre precedenti. 5

UN PROBLEMA: OMOCODIA L'algoritmo di calcolo del C.F. ha un difetto: può generare due codici identici se due persone hanno "quasi" lo stesso cognome e nome sono nate nello stesso giorno/mese/anno e comune sono dello stesso sesso Improbabile? NO! esistono già 24.000 casi del genere e più di 1000 nuovi ogni anno Soluzione: le cifre numeriche sono via via sostituite da lettere, a partire da destra: 0 L 1 M 2 N 3 P 4 Q ma per identificare l'omocodia bisogna accedere all' Anagrafe Tributaria! 6

ARCHITETTURA Per definire l'architettura dell'applicazione bisogna rispondere ad alcune domande fondamentali: Quali e quante classi? Chi usa cosa? Componenti software (statici) o classi come ADT (oggetti dinamici)? Quale modello di interazione fra l'applicazione nel suo complesso e l'esterno? da console (standard input) dalla linea di comando in altro modo ancora... 7

ARCHITETTURA: UNA POSSIBILE SCELTA Quali e quante classi? una sola pubblica: CodFisc Componenti software (statici) o classi come ADT (oggetti dinamici)? una componente software (statico) con una sola funzione (statica) pubblica: public static String calcolacodice(...) Quale modello di interazione fra l'applicazione nel suo complesso e l'esterno? argomenti dalla linea di comando del main 8

INTERAZIONE CON L'ESTERNO Ipotesi: argomenti sulla linea di comando del main Già.. ma FORMATTATI COME? La data esiste come entità atomica (1/2/1978) o vengono invece fornite le singole entità componenti? C:> java CodFisc Rossi Mario 1 2 1978 M A944 classe con il main cognome nome giorno mese anno sesso sigla Comune di nascita Attenzione: i caratteri numerici non sono numeri! 9

INTERAZIONE CON L'ESTERNO Sottoproblema: come trasformare stringhe in numeri? dalla riga di comando otteniamo stringhe di caratteri come "1978", "2". ma questi non sono gli interi millenovecentosettantotto, due, etc: OCCORRE UNA TRASFORMAZIONE! C:> java CodFisc Rossi Mario 1 2 1978 M A944 La trasformazione di stringhe in numeri (int, float, ) viene svolta dalle funzioni statiche: int Integer.parseInt(String) float Float.parseFloat(String) etc.; ad esempio: int x = Integer.parseInt("1978"); 10

LA CLASSE CodFisc Struttura interna (funzioni statiche private): una funzione calcolasiglacognome che calcola le prime tre lettere una funzione calcolasiglanome che calcola le seconde tre lettere una funzione calcolasigladata che calcola il blocco centrale (data di nascita e sesso) (la sigla del comune di nascita si assume data) una funzione calcolaultimalettera che calcola la lettera finale Interfaccia esterna (funzioni statiche pubbliche): la funzione calcolacodice che si avvale dei servitori privati precedenti. 11

Interfaccia: LA FUNZIONE calcolasiglacognome private static String calcolasiglacognome(string cognome) Specifica: occorre una stringa sigla per accumulare via via il risultato esplorare cognome da sinistra verso destra: finché contiene con-sonanti, e purché non ne siano già state trovate tre, concatenare la consonante trovata in coda a sigla se sigla non contiene ancora tre consonanti, ripetere l'esplora-zione di cognome cercando le vocali: finché ce ne sono e fintanto che sigla non contiene tre lettere, accodare la vocale trovata a sigla se dopo ciò in cognome manca ancora una lettera (possibile solo con i cognomi di due sole lettere), accodare a sigla una 12 X

COMPLETARE L'ESERCIZIO Per finire l esercizio: definire le altre funzioni definire un main che invochi calcolacodice con i parametri appropriati Osservazione (cambiamento dei requisiti): Cosa cambierebbe se i dati, invece che dalla linea di comando del main, provenissero dallo standard input, da un file,... dalla rete, da un'interfaccia grafica?? 13