Paso 3: Descifrar el código de barras
. < SERIAL >. < código >. < código de barras >.
< serie > es el número de serie único que tiene cada cuecat. La idea es que la empresa de distribución puede seguir lo que escanees. No veo necesidad de esto, así que se ignoran.
< CODE > es el tipo de código de barras. No tengo una lista exhaustiva, pero he visto "E13", "IB5", etc.. Creo que esto puede ayudar a decidir dónde buscar el código de barras, como me imagino que hay muchas fuentes de datos de código de barras. Me imagino que pueden ser libros, productos alimenticios y los códigos de barras que se imprime en diferentes formatos. Sé que algunos códigos de barras son números solamente, algunos son una mezcla de letras y números
bits de < código de barras > el interesante :-)
OK entonces, cómo decodificar...
Que trola la internet y encontró un montón de código de ejemplo en varios (no procesado/arduino) formato con poca explicación. Así que agarré una versión confiable que funcionaba bien en mi caja Linux escrita en PERL.
Aquí está el script PERL sorprendentemente escueta por Larry Wall
http://www.Accipiter.org/download/decue.txt
Para describirlo y entenderlo, lo hice en excel como sigue... se adjunta el archivo para jugar con.
1) romper el código y entrar en las 2 piezas descritas y descifrar uno a uno como se describe
2) cada conjunto de 4 caracteres es "sin codificar" en 3. Así que la longitud de la salida final es 3/4 de la cadena de entrada, redondeando si es necesario. (cifrado va que al revés necesita claramente a personajes para ninguna información se pierde)
3) tomar los 4 caracteres y mapa ASCII
-efectivamente "un-zA-Z0 - 9 +-" mapas de caracteres de ASCII 32-96 (es decir espacio ' ' a '_')
-por lo que E, N, b, X mapa a >, G,!, X respectivamente
Me pareció un problema a evitar convertir hacia adelante y hacia atrás entre caracteres ASCII y códigos (E.g. E <> – 69) como algunos caracteres no imprimibles son difíciles de solucionar y trabajando que caracteres no imprimibles se está imprimiendo es difícil. Así que en el código final he trabajado exclusivamente en códigos ASCII hasta el último paso. Es decir las líneas amarillas eran útiles, mientras que la ingeniería inversa esto, pero no son parte del código final...
4) restar 32 del código ASCII
->, G,!, X tiene el código ASCII de 62,71,33,81
-Restar 32 ofrece nos 30,39,1,49
5) tratar de códigos de los caracteres y ASCII como números de 6 bits (4 x 6 = 24 bits)
-30 nos da 01110, por lo que
-30,39,1,49 nos da 0 1 1 1 1 0 1 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1
6) tratar la cadena binaria como una cadena de caracteres de 8 bits, esto es cómo se convierte en 3/4 del tamaño! (3 x 8 = 24 bits)
-0 1 1 1 1 0 1 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1
-122, 112.113 z, p, q en formato ASCII
7) tome cada uno de los 3 códigos y exclusivos o con 67 = 01000011
-XOR 122 67 = 57
122 = 01111010
01000011 = 67
------------------------
00111001 = 57
-122, 112.113 se convierte en 57,51,50
8) convertir a ASCII
-57,51,50 se convierte en 932, que es los primeros 3 dígitos de mi código de barras!!!
9) repetir para cada 4 dígitos hasta obtener un '.' :-)