Codice Fiscale Inverso C
Codegrind Team•Jul 12 2024
Descrizione del Progetto
In questo progetto, realizzerai un decodificatore di codice fiscale in C. Il programma richiederà all’utente di inserire un codice fiscale e estrarrà le informazioni personali (nome, cognome, data di nascita, sesso e comune di nascita) da esso.
Requisiti
- Linguaggio di Programmazione: C
- Interfaccia Utente: Interfaccia a riga di comando
- FunzionalitĂ :
- Inserimento di un codice fiscale
- Decodifica del codice fiscale per estrarre le informazioni personali
Struttura del Progetto
- main.c: Contiene il main del programma e la logica per la decodifica del codice fiscale.
- decodificatore_cf.h: Definisce le funzioni e le strutture necessarie per la decodifica del codice fiscale.
- decodificatore_cf.c: Implementa le funzioni definite in
decodificatore_cf.h
.
Passaggi
-
Creare il file
decodificatore_cf.h
:- Definire le funzioni e le strutture per la decodifica del codice fiscale.
-
Creare il file
decodificatore_cf.c
:- Implementare le funzioni definite in
decodificatore_cf.h
.
- Implementare le funzioni definite in
-
Creare il file
main.c
:- Gestire l’interazione con l’utente e chiamare le funzioni per la decodifica del codice fiscale.
Codice del Progetto
decodificatore_cf.h
#ifndef DECODIFICATORE_CF_H
#define DECODIFICATORE_CF_H
typedef struct {
char nome[50];
char cognome[50];
char data_nascita[11];
char sesso;
char comune[50];
} DatiPersonali;
void decodifica_codice_fiscale(const char *codice_fiscale, DatiPersonali *dati);
#endif
decodificatore_cf.c
#include "decodificatore_cf.h"
#include <stdio.h>
#include <string.h>
#include <ctype.h>
// Dizionario dei comuni e codici catastali (solo esempi, da completare)
typedef struct {
char codice[5];
char nome[50];
} Comune;
Comune comuni[] = {
{"H501", "ROMA"},
{"F205", "MILANO"},
{"F839", "NAPOLI"},
// Aggiungi altri comuni qui
};
void estrai_nome_cognome(const char *parte, char *output) {
int j = 0;
for (int i = 0; i < 3; i++) {
if (isalpha(parte[i])) {
output[j++] = parte[i];
}
}
output[j] = '\0';
}
char* get_mese(char codice_mese) {
switch (codice_mese) {
case 'A': return "01";
case 'B': return "02";
case 'C': return "03";
case 'D': return "04";
case 'E': return "05";
case 'H': return "06";
case 'L': return "07";
case 'M': return "08";
case 'P': return "09";
case 'R': return "10";
case 'S': return "11";
case 'T': return "12";
default: return "00";
}
}
void estrai_comune(const char *codice, char *output) {
for (int i = 0; i < sizeof(comuni) / sizeof(comuni[0]); i++) {
if (strcmp(codice, comuni[i].codice) == 0) {
strcpy(output, comuni[i].nome);
return;
}
}
strcpy(output, "Comune sconosciuto");
}
void decodifica_codice_fiscale(const char *codice_fiscale, DatiPersonali *dati) {
char giorno_str[3] = {0}, mese_str[3] = {0}, anno_str[3] = {0};
int giorno, mese, anno;
// Estrarre cognome e nome
estrai_nome_cognome(codice_fiscale, dati->cognome);
estrai_nome_cognome(codice_fiscale + 3, dati->nome);
// Estrarre anno di nascita
strncpy(anno_str, codice_fiscale + 6, 2);
anno = atoi(anno_str);
if (anno < 40) {
anno += 2000;
} else {
anno += 1900;
}
// Estrarre mese di nascita
strcpy(mese_str, get_mese(codice_fiscale[8]));
// Estrarre giorno di nascita e sesso
strncpy(giorno_str, codice_fiscale + 9, 2);
giorno = atoi(giorno_str);
if (giorno > 40) {
dati->sesso = 'F';
giorno -= 40;
} else {
dati->sesso = 'M';
}
snprintf(dati->data_nascita, sizeof(dati->data_nascita), "%02d/%02d/%04d", giorno, atoi(mese_str), anno);
// Estrarre comune di nascita
char codice_comune[5] = {0};
strncpy(codice_comune, codice_fiscale + 11, 4);
estrai_comune(codice_comune, dati->comune);
}
main.c
#include <stdio.h>
#include "decodificatore_cf.h"
int main() {
char codice_fiscale[17];
DatiPersonali dati;
printf("Inserisci il codice fiscale: ");
scanf("%s", codice_fiscale);
if (strlen(codice_fiscale) != 16) {
printf("Codice fiscale non valido. Deve essere di 16 caratteri.\n");
return 1;
}
decodifica_codice_fiscale(codice_fiscale, &dati);
printf("Nome: %s\n", dati.nome);
printf("Cognome: %s\n", dati.cognome);
printf("Data di nascita: %s\n", dati.data_nascita);
printf("Sesso: %c\n", dati.sesso);
printf("Comune di nascita: %s\n", dati.comune);
return 0;
}
Istruzioni per l’Esecuzione
-
Compilare il programma:
gcc -o decodificatore_cf main.c decodificatore_cf.c
-
Eseguire il programma:
./decodificatore_cf
-
Interazione con l’utente:
- Inserisci il codice fiscale.
- Il programma decodificherĂ e mostrerĂ le informazioni personali.
Estensioni Possibili
- Validazione avanzata: Aggiungere controlli per validare il codice fiscale inserito.
- Database dei comuni: Utilizzare un database completo dei codici catastali per i comuni italiani.
- Interfaccia grafica: Creare una semplice interfaccia grafica per il decodificatore di codice fiscale utilizzando librerie grafiche come GTK o Qt.