Slow shaping

This commit is contained in:
giomba 2019-08-13 17:47:49 +02:00
parent 46097ddcae
commit 1a676c541a
8 changed files with 60 additions and 47 deletions

46
CNS.cpp
View File

@ -1,16 +1,11 @@
#include "CNS.h"
cnsp::CNS cnsp::dati_CNS_to_cpp() {
cnsp::CNS data;
void CNS::fromSmartCard(void) {
char* buffer;
size_t len;
int rv = read_dati_personali_c(&buffer, &len);
std::clog << "[D] " << rv << std::endl;
if (rv != 0) throw ExPCSC("can not read_dati_personali_c()");
//std::clog << "[D] " << len << '\t' << buffer << std::endl;
std::vector<std::string> field;
for (int i = 12; i < len; ) {
@ -27,24 +22,33 @@ cnsp::CNS cnsp::dati_CNS_to_cpp() {
free(buffer);
for (int i = 0; i < field.size(); ++i) {
std::clog << i << '\t' << field[i] << std::endl;
qDebug() << i << '\t' << field[i].data();
switch (i) {
case 0: data.dataRilascio = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break;
case 1: data.dataScadenza = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break;
case 2: data.cognome = QString(field[i].data()); break;
case 3: data.nome = QString(field[i].data()); break;
case 4: data.dataNascita = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break;
case 5: data.sesso = field[i] == "F" ? cnsp::F : cnsp::M; break; /* TODO what about other genders? */
case 7: data.codiceFiscale = QString(field[i].data()); break;
case 9: data.comuneNascita = QString(field[i].data()); break;
case 12: data.comuneResidenza = QString(field[i].data()); break;
case 0: this->dataRilascio = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break;
case 1: this->dataScadenza = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break;
case 2: this->cognome = QString(field[i].data()); break;
case 3: this->nome = QString(field[i].data()); break;
case 4: this->dataNascita = QDate::fromString(QString(field[i].data()), "ddMMyyyy"); break;
case 5: this->sesso = field[i] == "F" ? F : M; break; /* TODO what about other genders? */
case 7: this->codiceFiscale = QString(field[i].data()); break;
case 9: this->comuneNascita = QString(field[i].data()); break;
case 12: this->comuneResidenza = QString(field[i].data()); break;
default: break;
}
}
return data;
}
QTextStream& operator<< (QTextStream& os, const CNS& cns) {
os << "DataRilascio:\t" << cns.dataRilascio.year() << '-' << cns.dataRilascio.month() << '-' << cns.dataRilascio.day() << endl;
os << "DataScadenza:\t" << cns.dataScadenza.year() << '-' << cns.dataScadenza.month() << '-' << cns.dataScadenza.day() << endl;
os << "Nome:\t" << cns.nome << endl;
os << "Cognome:\t" << cns.cognome << endl;
os << "DataNascita:\t" << cns.dataNascita.year() << '-' << cns.dataNascita.month() << '-' << cns.dataNascita.day() << endl;
os << "ComuneNascita:\t" << cns.comuneNascita << endl;
os << "ComuneResidenza:\t" << cns.comuneResidenza << endl;
os << "CodiceFiscale:\t" << cns.codiceFiscale << endl;
os << "Sesso:\t" << ((cns.sesso == F) ? 'F' : 'M') << endl;
return os;
}

24
CNS.h
View File

@ -7,19 +7,21 @@
#include <vector>
#include <QDate>
#include <QDebug>
#include <QString>
#include <QTextStream>
#include "Ex.h"
#include "read_dati_personali.h"
#include "read_dati_personali_c.h"
namespace cnsp {
enum Sex {
F,
M
};
enum Sex {
F,
M
};
struct CNS {
class CNS {
private:
QString nome;
QString cognome;
QDate dataNascita;
@ -29,10 +31,10 @@ namespace cnsp {
Sex sesso;
QDate dataRilascio;
QDate dataScadenza;
};
CNS dati_CNS_to_cpp(void);
}
public:
void fromSmartCard(void);
friend QTextStream& operator<<(QTextStream& os, const CNS& cns);
};
#endif

1
Ex.cpp
View File

@ -18,7 +18,6 @@ Ex::Ex(const char* msg, int n) {
}
*/
std::ostream& operator<<(std::ostream& os, const Ex& e) {
os << e.msg;
return os;

15
README Normal file
View File

@ -0,0 +1,15 @@
=======================================================================
=== CNSPARSER ===
=======================================================================
A parser for Dati Personali contained in your Italian Carta Nazionale dei Servizi.
= Compile =
$ cd $REPO
$ mkdir build
$ cd build
$ qmake ..
$ make -j$(nproc)
= Disable debugging =
QT_LOGGING_RULES="*.debug=false;"

View File

@ -27,12 +27,12 @@ SOURCES += \
main.cpp \
CNS.cpp \
Ex.cpp \
read_dati_personali.cpp
read_dati_personali_c.cpp
HEADERS += \
CNS.h \
Ex.h \
read_dati_personali.h
read_dati_personali_c.h
QMAKE_CXXFLAGS += $(shell pkg-config --cflags libpcsclite)
QMAKE_LFLAGS += $(shell pkg-config --libs libpcsclite)

View File

@ -5,21 +5,14 @@
#include "CNS.h"
int main(void) {
cnsp::CNS cns;
CNS cns;
int r = 0;
try {
cns = cnsp::dati_CNS_to_cpp();
cns.fromSmartCard();
QTextStream(stdout) << "Data Rilascio:\t" << cns.dataRilascio.year() << '-' << cns.dataRilascio.month() << '-' << cns.dataRilascio.day() << endl;
QTextStream(stdout) << "Data Scadenza:\t" << cns.dataScadenza.year() << '-' << cns.dataScadenza.month() << '-' << cns.dataScadenza.day() << endl;
QTextStream(stdout) << "Nome:\t" << cns.nome << endl;
QTextStream(stdout) << "Cognome:\t" << cns.cognome << endl;
QTextStream(stdout) << "Data Nascita:\t" << cns.dataNascita.year() << '-' << cns.dataNascita.month() << '-' << cns.dataNascita.day() << endl;
QTextStream(stdout) << "Comune Nascita:\t" << cns.comuneNascita << endl;
QTextStream(stdout) << "Comune Residenza:\t" << cns.comuneResidenza << endl;
QTextStream(stdout) << "Codice Fiscale:\t" << cns.codiceFiscale << endl;
QTextStream(stdout) << "Sesso:\t" << cns.sesso << endl;
QTextStream out(stdout);
out << cns << endl;
r = 0;
} catch (Ex e) {

View File

@ -1,4 +1,4 @@
#include "read_dati_personali.h"
#include "read_dati_personali_c.h"
/*
``