Arduino och CueCat barcode scanner (3 / 5 steg)
Steg 3: Avkoda streckkoden
. < seriell >. < CODE >. < STRECKKOD >.
< seriell > är den unika serienummer som varje cuecat har. Tanken är att företaget distribuerar dem kan spåra vad du skannar. Jag ser inte ett behov av detta, så kommer att ignorera den.
< CODE > är streckkodstyp. Jag har inte en uttömmande lista men jag har sett "E13", "IB5" etc. Jag tror att detta kan hjälpa avgöra var du ska leta upp bomma för kodifierar, som jag kan tänka mig att det finns många källor för streckkodsdata. Jag kan tänka mig att böcker, livsmedel och streckkoderna utskriften kan vara i olika format. Jag vet att vissa streckkoder är nummer bara, några är en blandning av bokstäver och siffror
< STRECKKOD > intressanta lite :-)
OK så hur avkoda...
Jag styrs på internet och hittade massor av exempelkod i olika (icke bearbetning/arduino) format med lite förklaring. Så tog jag en pålitlig version som fungerade bra på min Linux-burk som var skrivet i PERL.
Här är himla bryskt Perlskript av Larry Wall
http://www.Accipiter.org/download/decue.txt
För att beskriva det, och förstår det, jag gjorde det i excel enligt följande... filen är kopplad för att spela med.
1) bryta koden och bryta sig in i de 2 stycken som beskrivs ovan, och dekryptera en i taget som beskrivs
2) varje uppsättning 4 tecken är "okrypterat" i 3. Så längden på den slutliga utmatningen är 3/4 av Indatasträngen, runda om det behövs. (kryptering går åt andra hållet behöver uppenbarligen pad ut tecken för att säkerställa att ingen information går förlorad)
3) tar de 4 tecken och karta till ASCII
-effektivt "en-zA-Z0 - 9 +-" kartor till ASCII-tecken 32-96 (dvs utrymme ' ' till '_')
-så E, N, b, X karta till >, G,!, X respektive
Jag fann det ett problem att hålla konvertera fram och tillbaka mellan ASCII-tecken och koder (exempel E <> - 69) som vissa icke utskrivbara tecken var svåra att felsöka och träna vilket icke utskrivbara tecken var som skrivs ut är tuff. Så i den final koden arbetade jag uteslutande i ASCII-koder tills det sista steget. DVS de gula linjerna var användbara samtidigt reverse engineering detta, men ingår inte i den final koden...
4) subtrahera 32 från ASCII-kod
->, G,!, X har ASCII-koden för 62,71,33,81
-Subtrahera 32 ger oss 30,39,1,49
5) behandla ovanstående tecken och ASCII-koder som tal 6 bitar (4 x 6 = 24 bitar)
-30 ger oss 01110, så
-30,39,1,49 ger oss 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) behandla binära strängen som en sträng av 8-bitars tecken, detta är hur det blir 3/4 storlek! (3 x 8 = 24 bitar)
-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 är z, p, q i ASCII-format
7) tar varje 3 koder och exklusiva och det med 67 = 01000011
-122 XOR 67 = 57
122 = 01111010
67 = 01000011
------------------------
00111001 = 57
-122, 112,113 blir 57,51,50
8) konvertera till ASCII
-57,51,50 blir 932, som är de 3 första siffrorna i min streckkod!
9) upprepa för varje 4 siffror tills du får en "." :-)