Förvandla din Arduino till en magnetisk kortläsare! (3 / 9 steg)
Steg 3: magnetkort grunderna
1. upptäcka när kortet har varit swiped
2. Läs ström av data
3. identifiera när kortet har gått
4. behandla uppgifterna
5. Visa data
Först kommer jag presentera dig för några magnetkort grunderna som du behöver veta när du börjar skriva din egen kod.
Magnetkort standarder
Magnetkort är standardiserade av ISO i följande dokument:
7810 fysiska kännetecken av kreditkort storlek dokument
7811-1 prägling
7811-2 magnetremsa - låg koercitivitet
7811-3 plats av präglade tecken
7811-4 placering av spår 1 & 2
7811-5 plats på spår 3
7811-6 magnetremsa - hög koercitivitet
7813 finansiell transaktion kort
Som ni kan se, finansiella kort anges i ett separat dokument och har ofta olika format än, säg, din livsmedelsbutik kort eller internationella telefonkort. Har du till program till dessa skillnader. Jag hade bara ett kreditkort och försäkringskortet händig, så jag programmerade för dessa typer (som båda råkar vara format B).
Kort format
Det finns flera olika format för magnetkort. Formatet A och B är vanliga, med B är den vanligaste jag har sett och som stöds i den här koden. Format C genom M är reserverade av ISO, tror jag, medan N genom?? är reserverade för institutionella anpassad användning.
Spår 1
För finansiella kort, det första spåret är inspelat i 210 bitar per tum och är den första 0.110" av kortet från toppen. Data kodas som "kortdata" som 7-bits per tecken. Det är 6-bitar för karaktären och lite för paritet. Det finns ~ 79 alfanumeriska tecken på spår 1.
Den fysiska beställning är bakåt. Det innebär att data är men det är skrivet baklänges på kortet (och därför kommer att läsa din firmware) som. Paritet är udda.
Dataformatet kort ser ut så här:
[SS] [FC] [Primär kontonummer] [FS] [Namn] [FS] [Ytterligare data] [FS] [ES] [LRC] där:
SS Start sentinel
FC formatkod
FS fältavgränsare
ES slutet sentinel
LRC längsgående redundans Check karaktär
Spåra en SS = '%', FC = ett format (kommer att bli B många gånger), FS är ofta '', ES är '?' och tecknet för LRC är vanligen "<" även om det inte anges i standarderna. Förutom att vara skrivet på kortet bakåt, data har en udda paritetsbit och 0x20 från ASCII. Vi ska hantera det när vi bearbeta data.
Spår 2
Spår två är 0.110" brett och startar 0.110 från toppen av kortet. Det är inspelning densitet är 75 bitar per tum. Data är 5 bitar per tecken och består av runt 40 numeriska tecken endast. Du bör inte stöta på några bokstäver på detta spår.
Dataformatet kort bör följa denna struktur:
[SS] [Primär kontonummer] [FS] [ytterligare data | diskretionära data] [ES] [LRC]
SS för spår två är semikolon: ';' och FS är '='
Med denna heliga kunskap under bältet, fortsätta till nästa steg och se koden som implementerar det förfarande som beskrivs ovan.