📢 Nuovo Corso Bootstrap Completo disponibile!

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

  1. Linguaggio di Programmazione: C
  2. Interfaccia Utente: Interfaccia a riga di comando
  3. Funzionalità:
    • Inserimento di un codice fiscale
    • Decodifica del codice fiscale per estrarre le informazioni personali

Struttura del Progetto

  1. main.c: Contiene il main del programma e la logica per la decodifica del codice fiscale.
  2. decodificatore_cf.h: Definisce le funzioni e le strutture necessarie per la decodifica del codice fiscale.
  3. decodificatore_cf.c: Implementa le funzioni definite in decodificatore_cf.h.

Passaggi

  1. Creare il file decodificatore_cf.h:

    • Definire le funzioni e le strutture per la decodifica del codice fiscale.
  2. Creare il file decodificatore_cf.c:

    • Implementare le funzioni definite in decodificatore_cf.h.
  3. 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

  1. Compilare il programma:

    Terminal window
    gcc -o decodificatore_cf main.c decodificatore_cf.c
  2. Eseguire il programma:

    Terminal window
    ./decodificatore_cf
  3. Interazione con l’utente:

    • Inserisci il codice fiscale.
    • Il programma decodificherà e mostrerà le informazioni personali.

Estensioni Possibili

  1. Validazione avanzata: Aggiungere controlli per validare il codice fiscale inserito.
  2. Database dei comuni: Utilizzare un database completo dei codici catastali per i comuni italiani.
  3. Interfaccia grafica: Creare una semplice interfaccia grafica per il decodificatore di codice fiscale utilizzando librerie grafiche come GTK o Qt.