Importare dati da Tessera Sanitaria CNS

perseoclub

Utente Attivo
28 Nov 2015
83
0
6
Salve a tutti,

prima di comprare il lettore per la CNS (compatibile con Ubuntu) vorrei chiedere un'informazione:

Dovendo progettare un gestionale (in php), è possibile gestire l'accettazione dei clienti tramite la smart card (Tessera sanitaria)?
Cioè, posso acquisire i dati inserendo la carta nel lettore e trasferire (in automatico) i dati anagrafici nel form dell'accettazione cliente?

Se sì, mi potete spiegare come si può fare?

Ciao

PS: che lettore (compatibile con Ubu16.04 64bit) mi consigliate?
 

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.087
299
83

perseoclub

Utente Attivo
28 Nov 2015
83
0
6
Grazie Max,

ho dato uno sguardo al tuo link, ma non cerco un software closed. Se possibile, ero orientato all'Open-Source, in modo tale da poter procedere da solo per ottenere quei dati che m'interessano (su Ubuntu e Win).
 

perseoclub

Utente Attivo
28 Nov 2015
83
0
6
Grazie caro,

avevo già letto il tuo prezioso intervento in quel post, ed ho scaricato lo .zip per la applet.. Ora però dovrò capire come muovermi, e soprattutto dovrò comprare il lettore per fare le prove.
Mi puoi consigliare qualche modello (compatibile anche con Linux) e che abbia una buona assistenza (download manuali e driver/api) dalla casa produttrice?
 

marino51

Utente Attivo
28 Feb 2013
2.744
141
63
Lombardia
ho acquistato (molti anni fa) il lettore di smart card come "inserto" del Corriere della Sera,
lo pagai 7 euro + il prezzo del quotidiano
è marcato Regione Lombardia (è correntemente usato dagli operatori della sanità pubblica)
si tratta del modello ACR38 USB,
ha sempre lavorato con XP, win7 e ora win10
qui trovo tutti i driver aggiornati
http://www.acs.com.hk/en/products/4/acr38-smart-card-reader/
ho sempre preferito i driver del "produttore" a quelli resi disponibili dal sito di Regione Lombardia
utilizzo comunque le funzionalità rese disponibili dalla regione (prenotazioni .....)

certo è una soluzione "home made"
non ho recapiti per una soluzione professionale, ma ci sarà un qualche rivenditore ufficiale
 

LinuxOhYeah

Utente Attivo
26 Nov 2016
188
7
18
Interessante. La cosa mi interessa anche a me. Vedo che anche l'ACR38 USB che ha comprato tempo fa Marino51 è compatibile con Linux e Android™ 3.1 and above, oltre a win. Sono disponibili per Linux: PC/SC Drivers (07-Dec-2016), PC/SC Driver Package (07-Dec-2016) e CT-API Library (12-Sep-2011) quindi potrebbero esserci i presupposti per poter fare qualsiasi programma open-source.
 

marino51

Utente Attivo
28 Feb 2013
2.744
141
63
Lombardia
ero riuscito a leggere i dati dalla tessera sanitaria con pc impostato con win7,
ma dopo l'installazione di win10 non ho più provato
 

LinuxOhYeah

Utente Attivo
26 Nov 2016
188
7
18
ma dopo l'installazione di win10 non ho più provato
Sul sito, link che hai postato, dice, per windows:
Codice:
Operating System Support - Win CE, Win 98, Win ME, Win 2000, Win 2003, Win 2003 R2, Win XP, Win Vista, Win 2008, Win 7, Win 8, Win 8.1
Win XP x64, Win 2003 x64, Win 2003 R2 x64, Win Vista x64, Win 2008 x64, Win 2008 R2 x64, Win 7 x64, Win 8 x64, Win 8.1 x64, Win 2012 x64, Win 2012 R2 x64
Non è riportato Win10, ma forse semplicemente non lo hanno aggiornato.
 

perseoclub

Utente Attivo
28 Nov 2015
83
0
6
UP per gli interessati..

Oggi ho acquistato (~20€) un lettore USB di banda magnetica (tipo HiCo) su Amazon. Mi arriva in settimana. Legge la banda magnetica, quindi le 3 tracce della tessera sanitaria, e restituirmi i dati in una stringa alfanumerica:
- Cognome e Nome & Codice Fiscale

"Pulendo" la stringa dovrei essere in grado di ottenere questi campi, e da lì riottenere tutti i dati necessari all'identificazione dell'utente: Cognome, Nome e CF (→ sesso, data e comune di nascita)

Vi tengo aggiornati!
 

perseoclub

Utente Attivo
28 Nov 2015
83
0
6
Perfetto, funziona! Striscio la scheda nel lettore e ottengo:
COGNOME, NOME e CODICE FISCALE ..che, tradotto, mi da SESSO, DATA e LUOGO (codice catastale) di NASCITA

Procedura:

- Ho comprato questo lettore usb smartcard (non richiede driver d'installazione; io uso Ubuntu ma l'ho provato anche su Winzoz XP): OSAYDE MSR90D

- Per interagire con il lettore utilizzo un script js che mi permette di recuperare la stringa dalla scheda.

- Lavorando sulla stringa riottengo Cognome, Nome e CF che inviato tramite una chiamata ajax ad un file php mi restituisce i dati decodificati.

NB: per chi fosse interessato, lo script js l'ho reperito a questo link (serve l'account a dropbox). Consiglio di usare la jquery.js (vers. 3.1.1), e non quella presente nel file zip. Il file zip è questo:

file zip - script js


Buon lavoro!

PS: il lettore smart-card legge la striscia magnetica, non il chip delle moderne tessere sanitarie. Quindi è valido solo per l'identificazione del paziente, non per entrare nella sua cartella digitale. Per quello serve un altro tipo di lettore (che ho comprato, ed è in standby.. e quando servirà proverò ad utilizzare..)!!
 
Ultima modifica:

marino51

Utente Attivo
28 Feb 2013
2.744
141
63
Lombardia
PS: il lettore smart-card legge la striscia magnetica, non il chip delle moderne tessere sanitarie. Quindi è valido solo per l'identificazione del paziente, non per entrare nella sua cartella digitale. Per quello serve un altro tipo di lettore (che ho comprato, ed è in standby.. e quando servirà proverò ad utilizzare..)!!
ho riprovato la lettura su win7, ho dovuto inserire lo script nei siti autorizzati di java ( vers 8 . 121 ) perché hanno "migliorato" la sicurezza e di nuovo funziona, legge il chip non la banda, il lettore è il solito distribuito il secolo scorso con il corriere della sera

il software è il solito già indicato

ps viene ben riconosciuto il cambio di tessera,
la prova è stata fatta anche con una tessere "blu", nuova recentemente consegnata
 

Allegati

msccmra51

Utente Attivo
9 Set 2017
50
0
6
Perfetto, funziona! Striscio la scheda nel lettore e ottengo:
COGNOME, NOME e CODICE FISCALE ..che, tradotto, mi da SESSO, DATA e LUOGO (codice catastale) di NASCITA

Procedura:

- Ho comprato questo lettore usb smartcard (non richiede driver d'installazione; io uso Ubuntu ma l'ho provato anche su Winzoz XP): OSAYDE MSR90D

- Per interagire con il lettore utilizzo un script js che mi permette di recuperare la stringa dalla scheda.

- Lavorando sulla stringa riottengo Cognome, Nome e CF che inviato tramite una chiamata ajax ad un file php mi restituisce i dati decodificati.

NB: per chi fosse interessato, lo script js l'ho reperito a questo link (serve l'account a dropbox). Consiglio di usare la jquery.js (vers. 3.1.1), e non quella presente nel file zip. Il file zip è questo:

file zip - script js


Buon lavoro!

PS: il lettore smart-card legge la striscia magnetica, non il chip delle moderne tessere sanitarie. Quindi è valido solo per l'identificazione del paziente, non per entrare nella sua cartella digitale. Per quello serve un altro tipo di lettore (che ho comprato, ed è in standby.. e quando servirà proverò ad utilizzare..)!!
Ciao Perseoclub, mi inserisco in questa discussione poiché voglio implementare la funzione di lettura smart card. Volevo chiederti se avevi provato anche le schede col chip, come avevi annunciato. Funzionano?. Nel frattempo hai aggiornato lo script js o continui a lavorare così come hai descritto qui? Grazie!!
 

perseoclub

Utente Attivo
28 Nov 2015
83
0
6
Ciao,

No, alla fine non provato con il chip perché non mi occorre questa funzione.. al momento utilizzo con profitto lo script come già precedentemente postato.
 

msccmra51

Utente Attivo
9 Set 2017
50
0
6
Scusa se ti disturbo ancora Perseoclub. In attesa che mi arrivi il lettore di card voglio programmare il lavoro. Se ho capito bene si procede così:
- sul server installo jquery.cardswipe.js, MySwipe.php e jquery 3.x.x
- installo il lettore che, se non ho capito male, non necessita di drivers
Quando striscio la TS nella variabile cardData mi ritrovo automaticamente i dati della persona.
E' davvero così semplice o mi sfugge qualcosa?
 

perseoclub

Utente Attivo
28 Nov 2015
83
0
6
Perdona il ritardo.. ma molto incasitato

Io ho adattato il plugin per i miei scopi in questo modo:

Codice:
// ++++++++ CARDSWIPE ++++++++

    // Parses raw scan into name and ID number
    var scan = function (rawData) {
        //if (!$(".cbx").is(':checked')) return false;
        console.log(rawData);
        rawData = rawData.toUpperCase();
        var pattern = /^[a-zA-Z]{6}[0-9]{2}[a-zA-Z][0-9]{2}[a-zA-Z][0-9]{3}[a-zA-Z]$/;
        console.log(rawData.substr(1, 16).search(pattern));
        if (!rawData.substr(1, 16).search(pattern)){

            vettore = rawData.split("  ");

            nome = vettore[1].replace("_", "").trim();
            cognome = vettore[0].substr(17).trim();
            cf = vettore[0].substr(1, 16).trim();

            $("[data-cardswipe='cognome']").val(cognome);
            $("[data-cardswipe='nome']").val(nome);
            $("[data-cardswipe='codiceFiscale']").val(cf);

            cardData=rawData;

            $.ajax({
                url: "estrai_dati_cf.php",
                dataType: "json",
                type: "post", //I want a type as POST
                data: "cf="+cf,
                success: function(data){
                    var dataNasc = data.dataNasc;
                    var comune = data.comune;
                    var cod4 = data.cod4;
                    var sesso = data.sesso;

                    $("[data-cardswipe='nascitaData']").val(dataNasc);
                    $("[data-cardswipe='nascitaComune']").val(comune);
                    $("[data-cardswipe='nascitaCod4']").val(cod4);
                    if (sesso==='M') {
                        $("[data-cardswipe='sessoM']").prop("checked", true);
                    } else {
                        $("[data-cardswipe='sessoF']").prop("checked", true);
                    }
                }
            });

            return cardData;
        } else {
            console.log("La tessera non è corretta o non leggibile!");
        }
    };

    // Initialize the plugin.
    $.cardswipe({
        parser: scan,
        enabled: true
    });
Logicamente lanci questo script nella .js principale.. e le data-cardswipe='...' sono gli input dei miei form..

PS: se migliori il parser condividilo.. a me questo va più che bene..

PPS: "estrai_dati_cf.php" è un mio script php che dal codice fiscale estrae: sesso, luogo di nascita e data di nascita..
 

msccmra51

Utente Attivo
9 Set 2017
50
0
6
Ciao Perseoclub, il tuo script funziona perfettamente. L'ho solo personalizzato per adattarlo al mio gestionale, ma nulla di trascendentale. Davvero ottimo lavoro (e ne ha tolto tanto a me:D). Volevo chiederti se hai sotto mano uno script che serva a leggere il chip della tessesa sanitaria. Se ho ben capito quello che striscia la carta non è altro che una tastiera che alla fine della lettura invia un return e quindi completa l'input. Il lettore di chip non è così e non saprei come inviare i dati letti alla applicazione che li dovrà elaborare.
Grazie come sempre.
 

msccmra51

Utente Attivo
9 Set 2017
50
0
6
Ho semplificato il mio script di lettura della TS. In particolare, per l'uso che ne faccio, non ho avuto bisogno di JS. Dato che l'ottimo lettore suggerito da Perseoclub si comporta come una tastiera, ho creato una pagina php con un form ed un textedit di input chiamato TesseraSanitaria. Appena striscio la tessera il campo di input si valorizza automaticamente con la stringa in essa contenuta. Il form ha come action una pagina php di elaborazione, per esempio EstraiDati.php dove c'è il seguente codice:
Codice:
$ts= $_POST['TesseraSanitaria'];
$codFis = substr($ts, 1, 16);
$stringa = substr($ts, 17);
$stringa = str_replace("  ","_", $stringa);
$stringa = explode('_', $stringa);
$nome = $stringa[0];
$cognome = $stringa[1];
La variabile $codFis può essere inviata ad uno script che ne controlla la validità e restituisce il luogo di nascita e tutto il resto. In rete se ne trovano molti.
Da notare che la stringa della tessera sanitaria usa DUE spazi per separare il cognome dal nome, immagino per non confondersi con i cognomi composti tipo Di Giacomo. Quindi accertarsi che $stringa = str_replace(" ","_", $stringa) contenga due spazi. Spero possa servire a chi non ha bisogno si usare JS.
 
Ultima modifica: