磁条卡刷卡原理

磁卡上的数据记录是按照IS07811的标准规定,有三个磁道。一磁道的数据记录密度为210bpi,最多可记录79个字母和数字,每个字符由7位编码.一磁道是只读磁道。二磁道的数据记录密度为75bpi,最多可记录40个数字,每个字符有5位编码,二磁道也是只读磁道。三磁道的数据记录密度是210bpi,最多可以记录107个数字,每一个字符由5位编码,三磁道是读写磁道。在银行系统的运用中。所有的银行磁条卡都运用二磁道。根据各个银行规定可以选择运用三磁道.一磁道暂不使用。
 
以二磁道为例,每5个bit组成一个byte的数据,p1,c4,c3,c2,c1,其中p1表示奇偶校验位,e1一e4表示数据位,一共可以表示16 种字符.在这些字符当中含有10个阿拉伯数字和6个其他字符。磁道上的数据是逻辑取反的,即磁道上取到的为1的数据,实际表示逻辑0。将取反后得到数据的低四位再加上0X30可以取到相应ASIC码。磁道开始有一些冗余数据,紧接着是起始标志位,再者是数据区,后是结束标志位。在这之后是LRC(纵向冗余校验位),最后又是冗余数据区。二磁道从开始标志位到结束标志位一共最多可以有40个数据。

冗余数据区:不含有效数据,只是用作磁道数据的同步,由若干的1组成,取反后全为数据0。一般在软件译码时,只有当检测到连续出现5位连续1(即表示逻辑0)的冗余数据时,才认为磁道已经开始。
开始标志位:磁道上的数据是101O0,取反后是01011。值为0x0B,加上0X30后为字符‘;’。
数据区:包含主账号,字段分隔符,失效日期,服务代码,附加数据。其译码方式与开始标志位相同。结束标志位值为OxlF。其转化成ASIC码为字符‘?’。
LRC(纵向冗余校验位):磁道上各字符的异或和。
由于刷卡方向不定.可能为正向刷卡或者是反向刷卡。所以在判断有效数值时以磁道上第一个0(取反即为1)为标志,这是因为无论是使其标志位0x0B还是OxlF其第一个有效位都是0 (取反即为1)。

作正向刷卡数据处理,首先,将接收到的数据一起存放在一段内存区内,判断当第一位为0(取反为1)的数据开始作为有效数据每五个bit取反作为一个字节的数据。第一个数据为0x0B且有能够在40个字节的数据之内有OxlF判断为正向数据接收成功。

反向刷卡有50%的几率,作反向刷卡时,数据处理是从所有磁道上接收的数据的最后一个bit开始往前每5个bit组成一个byte。当第一位为0(取反为逻辑1)的数据开始做每5个bit取反作为一个字节的解码操作,第一个数据为0XOB且在107数据之内有0x1F出现判断为反向数据接收成功。之后将接收成功的数据转化成相应的ASIC码。

你可能感兴趣的:(c,byte)