Codice Fiscale Inverso C
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:
Terminal window gcc -o decodificatore_cf main.c decodificatore_cf.c -
Eseguire il programma:
Terminal window ./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.