Non hai un amico che fa il farmacista ? questa cosa mi sta interessando ... seguo il 3d
Inviato da SM-J530F tramite App ufficiale di Tom\'s Hardware Italia Forum
Inviato da SM-J530F tramite App ufficiale di Tom\'s Hardware Italia Forum
Offline assolutamente.Mi hanno messo in standby...
Domanda, ce l'hai bisogno che funzioni online oppure offline?
Ah, non avevo visto questa risposta.sto terminando di sviluppare un programma in java che recupera i dati pubblici della tessera sanitaria
Ah, neanche uno zip? Ok ti passo l'email che uso qui via pm, grazienon me lo allega qui nel forum, se mi mandi una mail te lo allego, ti ci vuole però un lettore di smartcard
Buongiorno Paolo, sono in crisi da diverso tempo anch'io sulla lettura delle tessere sanitarie con chip. Potresti aiutarmi? Grazie infinitefunziona egregiamente con un lettore di smartcard per le tessere solo che per quelle di nuova emissione non estrae i dati. Secondo me devono avere cambiato la posizione dell' EF contenente i dati personali oppure hanno messo un blocco di pin, ma non credo
// show the list of available terminals
TerminalFactory factory = TerminalFactory.getDefault();
List<CardTerminal> terminals = factory.terminals().list();
System.out.println("Terminals: " + terminals);
// get the first terminal
CardTerminal terminal = terminals.get(0);
// establish a connection with the card
//stabiliamo un canale di comunicazione con il terminale
Card card = terminal.connect("*");
System.out.println("card: " + card);
CardChannel channel = card.getBasicChannel();
//chiediamo al canale di comunicazione di darci il num di byte dell'atr
ATR atr = card.getATR();
System.out.println("numero byte di "+atr);
System.out.println("");
//ci facciamo dare l'array di byte dell'atr in stringa
byte[] bytes = atr.getBytes();
String atrbin = Arrays.toString(bytes);
System.out.println(" insieme dei numeri di atr "+ atrbin);
System.out.println("");
String s = new String(bytes);
// scriviamo decifrandoli in caratteri anche se tuttavia non hanno senso in quanto hanno altri significati
System.out.println("i byte decodificati in stringa "+s);
// diamo un comando apdu alla smart di selezionare il MF
byte[] apdu = new byte[7];
apdu[0]=(byte)0x00;
apdu[1]=(byte)0xa4;
apdu[2]=(byte)0x00;
apdu[3]=(byte)0x00;
apdu[4]=(byte)0x00;
apdu[5]=(byte)0x3F;
apdu[6]=(byte)0x00;
ResponseAPDU r = channel.transmit(new CommandAPDU(apdu));
// diamo un comando apdu alla smart di selezionare il DF
byte[] apdu1 = new byte[7];
apdu1[0]=(byte)0x00;
apdu1[1]=(byte)0xa4;
apdu1[2]=(byte)0x00;
apdu1[3]=(byte)0x00;
apdu1[4]=(byte)0x02;
apdu1[5]=(byte)0x11;
apdu1[6]=(byte)0x00;
ResponseAPDU r1 = channel.transmit(new CommandAPDU(apdu1));
// diamo un comando apdu alla smart di selezionare EF
byte[] apdu2 = new byte[7];
apdu2[0]=(byte)0x01;
apdu2[1]=(byte)0xa4;
apdu2[2]=(byte)0x00;
apdu2[3]=(byte)0x00;
apdu2[4]=(byte)0x02;
apdu2[5]=(byte)0x11;
apdu2[6]=(byte)0x02;
ResponseAPDU r2 = channel.transmit(new CommandAPDU(apdu2));
// diamo un comando apdu alla smart di leggere ET
byte[] apdu3 = new byte[7];
apdu3[0]=(byte)0x01;
apdu3[1]=(byte)0xB0;
apdu3[2]=(byte)0x00;
apdu3[3]=(byte)0x00;
apdu3[4]=(byte)0x00;
apdu3[5]=(byte)0x00;
apdu3[6]=(byte)0x190;
ResponseAPDU r3 = channel.transmit(new CommandAPDU(apdu3));
//scrivo il numero di byte della apdu e la risposta sw
System.out.println(Arrays.toString(r3.getBytes()));
System.out.println(r3.toString());
// scrivo il risultato tradotto in stringa dell'array della apdu
String s1 = new String(r3.getData());
System.out.println(s1);
// levo i primi 6 caratteri che indicano il totale dei caratteri in esadecimale
//per comodità chiamo i bytes caratteri
String s2 = s1.substring(6);
System.out.println(s2);
//trasformo in int i successivi due caratteri
String s221 = s1.substring(6, 8);
int dec = Integer.parseInt(s221,16);
System.out.println(dec);
//scrivo la substringa da 8 a 8+dec
String codemett = s1.substring(8, (8+dec));
System.out.println("codice emettitore: "+codemett);
//trasformo in int gli ulteriori due caratteri esadecimali
String s222 = s1.substring((8+dec), (10+dec));
int dec1 = Integer.parseInt(s222,16);
System.out.println(dec1);
// scrivo la substringa della data di emissione da 8+2+dec a 8+2+dec+dec1
String dataemis = s1.substring((10+dec), (14+dec1));
System.out.println("data di emissione: "+dataemis);
//trasformo in int gli ulteriori due caratteri esadecimali indicanti byte scadenza
String s223 = s1.substring((10+dec+dec1), (12+dec+dec1));
int dec2 = Integer.parseInt(s223,16);
System.out.println(dec2);
// scrivo la substringa data scadenza da 12+dec+dec1 a 12+dec+dec1+dec2
String datascad = s1.substring((12+dec+dec1), (12+dec+dec1+dec2));
System.out.println("data di scadenza: "+datascad);
//trasformo in int gli ulteriori due caratteri esadecimali indicanti cognome
String s224 = s1.substring((12+dec+dec1+dec2), (14+dec+dec1+dec2));
int dec3 = Integer.parseInt(s224,16);
System.out.println(dec3);
// scrivo la substringa cognome da 14+dec+dec1+dec2 a 12+dec+dec1+dec2
String cognome = s1.substring((14+dec+dec1+dec2), (14+dec+dec1+dec2+dec3));
System.out.println("cognome: "+ cognome);
//trasformo in int gli ulteriori due caratteri esadecimali del nome
String s225 = s1.substring((14+dec+dec1+dec2+dec3), (16+dec+dec1+dec2+dec3));
int dec4 = Integer.parseInt(s225,16);
System.out.println(dec4);
// scrivo la substringa cognome da 16+dec+dec1+dec2+dec3 a 16+dec+dec1+dec2+dec3+dec4
String nome = s1.substring((16+dec+dec1+dec2+dec3), (16+dec+dec1+dec2+dec3+dec4));
System.out.println("nome: "+ nome);
//trasformo in int gli ulteriori due caratteri esadecimali della data nascita
String s226 = s1.substring((16+dec+dec1+dec2+dec3+dec4),(18+dec+dec1+dec2+dec3+dec4));
int dec5 = Integer.parseInt(s226,16);
System.out.println(dec5);
// scrivo la substringa cognome da 18+dec+dec1+dec2+dec3+dec4 a 18+dec+dec1+dec2+dec3+dec4+dec5
String datanascita = s1.substring((18+dec+dec1+dec2+dec3+dec4),(18+dec+dec1+dec2+dec3+dec4+dec5));
System.out.println("data di nascita: "+ datanascita);
//trasformo in int gli ulteriori due caratteri esadecimali del sesso
String s227 =s1.substring((18+dec+dec1+dec2+dec3+dec4+dec5),(20+dec+dec1+dec2+dec3+dec4+dec5));
int dec6 = Integer.parseInt(s227,16);
System.out.println(dec6);
// scrivo la substringa cognome da 20+dec+dec1+dec2+dec3+dec4 a 20+dec+dec1+dec2+dec3+dec4+dec5+dec6
String sesso = s1.substring((20+dec+dec1+dec2+dec3+dec4+dec5),(20+dec+dec1+dec2+dec3+dec4+dec5+dec6));
System.out.println("sesso: "+ sesso);
//trasformo in int gli ulteriori due caratteri esadecimali del codice fiscale
String s228 =s1.substring((20+dec+dec1+dec2+dec3+dec4+dec5+dec6),(24+dec+dec1+dec2+dec3+dec4+dec5+dec6));
int dec7 = Integer.parseInt(s228,16);
System.out.println(dec7);
// scrivo la substringa codice fiscale da 22+dec+dec1+dec2+dec3+dec4+dec5+dec6 a 22+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7
String codfisc = s1.substring((24+dec+dec1+dec2+dec3+dec4+dec5+dec6),(24+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7));
System.out.println("codice fiscale: "+ codfisc);
//trasformo in int gli ulteriori due caratteri esadecimali del comune di nascita
String s229 =s1.substring((24+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7),(28+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7));
int dec8 = Integer.parseInt(s229,16);
System.out.println(dec8);
// scrivo la substringa cognome da 28+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7 a 28+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7+dec8
String comunasc = s1.substring((28+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7),(28+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7+dec8));
System.out.println("comune di nascita: "+ comunasc);
//trasformo in int gli ulteriori due caratteri esadecimali del comune di residenza
String s230 = s1.substring((32+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7+dec8),(34+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7+dec8));
int dec9 = Integer.parseInt(s230,16);
System.out.println(dec9);
// scrivo la substringa comures da 32+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7+dec8 a 32+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7+dec8+dec9
String comures = s1.substring((34+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7+dec8),(34+dec+dec1+dec2+dec3+dec4+dec5+dec6+dec7+dec8+dec9));
System.out.println("comune di residenza: "+ comures);
surname.setText(cognome);
name.setText(nome);
String datanascita1 =datanascita.substring(0, 2) + "-" + datanascita.substring(2, 4) + "-" + datanascita.substring(4, 8);
birth.setText(datanascita1);
sex.setText(sesso);
codfiscale.setText(codfisc);
townbirth.setText(comunasc);
townstay.setText(comures);
cem.setText(codemett);
String dataemis1 = dataemis.substring(0, 2)+ "-"+dataemis.substring(2, 4)+ "-"+dataemis.substring(4, 8);
dem.setText(dataemis1);
String datascad1 = datascad.substring(0, 2)+ "-"+datascad.substring(2, 4)+ "-"+datascad.substring(4, 8);
dts.setText(datascad1);