🚀 Nuova versione beta disponibile! Feedback o problemi? Contattaci

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

  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:

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

    ./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.