domingo, 28 de diciembre de 2014

Comenzando con la lectura de datos de la tarjeta del conductor

Después de algun tiempo desaparecido vuelvo a retomar el proyecto aparcado que tenia por las circunstancias de la vida.

Aqui os dejo un fragmento del codigo en la que el fichero del conductor del tacografo lo divido y analizo las diferentes partes en la que se compone segun BOE 105 de 2005 pag. 15127 observando un error en FID 500 que define Application_indentification cuyo FID es 501(hex 0x0500).

Codigo:

  1. FileInputStream fis = null;
  2. DataInputStream entrada = null;
  3. DataOutputStream salida = null;
  4. File fichero = new File("a.TGD");
  5. System.out.println("numero de byte del fichero: " + fichero.length());
  6. byte[] array_byte = new byte[(int) fichero.length()];
  7. byte n;

  8. try {
  9. String cadena;
  10. fis = new FileInputStream("a.TGD");
  11. entrada = new DataInputStream(fis);

  12. boolean ok = true;
  13. CardIccIdentification icc;
  14. while (true) {

  15. ArchivoElemental ae = new ArchivoElemental();
  16. // *************** id del archivo *********************
  17. cadena = String.format("0x%02x", entrada.readByte());
  18. cadena += String.format("%02x", entrada.readByte());
  19. ae.FIDhex = cadena;
  20. if (FIDtoStr(ae.FIDhex) != "") {
  21. ae.FID = FIDtoStr(cadena);
  22. }
  23. // **************** tipo de archivo (elemental o firma)
  24. // ********************
  25. ae.tipo = entrada.readByte();
  26. // **************** longitud del archivo (elemental o firma=128)
  27. // *************
  28. char longitud = entrada.readChar();
  29. int total = Integer.valueOf(longitud);
  30. ae.longitud = total;
  31. // ***************** datos archivo elemental
  32. // **************************************
  33. byte[] datos = new byte[total];
  34. entrada.read(datos, 0, total);
  35. ae.datos = datos;

  36. if (ae.tipo == 00 ) {
  37. System.out.println("FID : " + ae.FID);
  38. System.out.println(" FID HEX:" + ae.FIDhex);
  39. System.out.println("Longitud: " + ae.longitud);
  40. // salida=new DataOutputStream(new
  41. // FileOutputStream(ae.FID,true));
  42. // salida.write(datos);
  43. // salida.close();
  44. // for (byte da : datos) {
  45. // System.out.format("%h", da);
  46. // }

  47. }

  48. lista.add(ae);

  49. }

  50. } catch (FileNotFoundException e) {
  51. System.out.println(e.getMessage());
  52. } catch (EOFException e) {
  53. System.out.println("Fin de fichero");

  54. } catch (IOException e) {
  55. System.out.println(e.getMessage());
  56. } finally {
  57. try {
  58. if (fis != null) {
  59. fis.close();
  60. }
  61. if (entrada != null) {
  62. entrada.close();
  63. }
  64. } catch (IOException e) {
  65. System.out.println(e.getMessage());
  66. }
  67. }

  68. }

  69. public static String FIDtoStr(String word) {
  70. String cadena = "";
  71. switch (word) {
  72. case "0x0002":
  73. cadena = "ICC";
  74. break;
  75. case "0x0005":
  76. cadena = "IC";
  77. break;
  78. case "0x0501":
  79. cadena = "Application identification";
  80. break;
  81. case "0xc100":
  82. cadena = "Card certificate";
  83. break;
  84. case "0xc108":
  85. cadena = "CA certificate";
  86. break;
  87. case "0x0520":
  88. cadena = "Identification";
  89. break;
  90. case "0x050E":
  91. cadena = "Card download";
  92. break;
  93. case "0x0521":
  94. cadena = "Driving license info";
  95. break;
  96. case "0x0502":
  97. cadena = "Events data";
  98. break;
  99. case "0x0503":
  100. cadena = "Faults data";
  101. break;
  102. case "0x0504":
  103. cadena = "Driver activity data";
  104. break;
  105. case "0x0505":
  106. cadena = "Vehicles uses";
  107. break;
  108. case "0x0506":
  109. cadena = "Places";
  110. break;
  111. case "0x0507":
  112. cadena = "Currents usage";
  113. break;
  114. case "0x0508":
  115. cadena = "Control activity data";
  116. break;
  117. case "0x0522":
  118. cadena = "Specific conditions";
  119. break;
  120. default:
  121. cadena = "cadena desconocida";
  122. break;

  123. }
  124. return cadena;
  125. }
  126. }

Los resultados obtenidos son :



Una vez identificadas las partes de que se compone los archivos ahora viene estudiar algo de ASN.1 para el mapeo con las clases java arduo trabajo.

No hay comentarios:

Publicar un comentario