关于磁卡的基本常识本文档的目的在于普及与银行卡业务相关的软硬件人员最基本的银行卡片知识,在于提供给各项目负责人一个一个了解银行磁卡的引子。对于想要细究银行磁卡以及磁卡解码电路等方面的资深技术人员可以直接忽略本文档。一、磁条卡的概念、相关规范标准磁条卡是一种磁记录介质卡片。它由高强度、耐高温的塑料或纸质涂覆塑料制成,能防潮、耐磨且有一定的柔韧性,携带方便、使用较为稳定可靠。通常,磁卡的一面印刷有说明提示性信息,如插刷卡方向;另一面则有磁层或磁条,具有2-3个磁道以记录有关信息数据。广泛应用于管理公共运输、停车场、电话、电影院、船运、俱乐部、宾馆房间和银行卡纪录等等。抗磁:简单讲,是用来衡量磁条抵抗因受外界磁场影响而造成数据损失的能力,又称抗消磁性。磁抗(矫顽磁力)单位是OE(奥斯特)。低磁抗条:普通抗消磁性磁条,磁抗一般为300~650OE。高磁抗条:具有较高抗消磁性磁条,磁抗一般为2750,3500和4000OE。磁条卡的标准,国际标准ISO/IEC7811-1,2,3,4,5,6,国家标准有GB/T15120。详细规定了磁条卡的介质、物理尺寸、磁条数据位置、角度、磁性强度、磁条数据位的宽度、磁条数据的前导0等等。二、卡片硬件构成:如上图,磁卡一般包含3个磁道,Track1,2,3的每个磁道宽度相同,大约在2.80mm(0.11英寸)左右,用于存放用户的数据信息;相邻两个Track约有0.05mm(0.02英寸)的间隙(Gap),用于区分相邻的两个磁道;整个磁带宽度在10.29毫米(0.405)左右(如果是应用3个Track的磁卡),或是在6.35毫米(0.25英寸)左右(如果是应用2个Track的磁卡)。实际上我们所接触看到的银行磁卡上的磁带宽度会加宽1~2mm左右,磁带总宽度在12~13mm之间。在磁带上,记录3个有效磁道数据的起始数据位置和终结数据位置不是在磁带的边缘,而是在磁带边缘向内缩减约7.44mm(0.293英寸时)为起始数据位置(引导0区);在磁带边缘向内缩减约6.93mm(0.273英寸)为终止数据位置(尾随0区);这些标准是为了有效保护磁卡上的数据不易被丢失。因为磁卡边缘上的磁记录数据很容易因物理磨损而被破坏。按照国标GB/T15120的相关规定,银行磁卡磁道位置最大可以上下偏移0.5mm(同一磁条边沿最上可以到达位置与最下可以到达位置之间的距离最大为1mm),磁道的宽度一般为2.8mm左右,而C730要求的读磁卡磁头的磁道宽度为1.40.1mm,C730磁头定位孔允许偏差的距离为0.05mm,在最坏情况下,磁头定位偏差0.1mm,磁头磁道宽度为1.5mm,磁头磁条允许活动空间为1.7mm,因此只要所有构件定位均符合设计要求,则无论上边沿卡还是下边沿卡,磁头磁条始终保持在卡片磁道中,从而保证了刷卡的可靠性。磁道(Track1,Track2,Track3)使用的数字和字符:磁卡上3个Track一般都是使用“位”(bit)方式来编码的。根据数据所在的Track不同,5个bit或7个bit组成一个字节。Track1(IATA):记录密度为210BPI;可以记录0~9数字及A~Z字母等;总共可以记录多达79个数字或字符(包含起始结束符和校验符);每个字符(一个字节)由7个bit组成。由于Track1上的信息不仅可以用数字0~9来表示,还能用字母A~Z来表示信息,因此Track1上信息一般记录了磁卡的使用类型、范围等一些“标记”性、“说明”性的信息。例如银行用卡中,Track1记录了用户的姓名,卡的有效使用期限以及其他的一些“标记”信息。Track2(ABA):记录密度为75BPI;可以记录0~9数字,不能记录A~Z字符;总共可以记录多达40个数字(包含起始结束符和校验符);每个数据(一个字节)由5个bit组成。Track3(THRIFT):记录密度为210BPI;可以记录0~9数字,不能记录A~Z字母;总共可以记录多达107个数字或字符(包含起始结束符和校验符);每个字符(一个字节)由5个bit组成。由于Track2和Track3上的信息只能用数字0~9等来表示,不能用字母A~Z来表示信息,因此在银行用卡中,Track2,3一般用以记录用户的帐户信息、款项信息等等,当然还有一些银行所要求的特殊信息等。由于目前我们产品只支持二、三磁道数据解码,因此对于一磁道信号不作介绍。三、数据在磁条上的存储方式数据存储在磁条上通常采用双频相位相干记录,数据由数据位和定时位一起构成,在两个时钟之间产生的磁通翻转记为“1”,无磁通翻转记为“0”。数据按照字符的同步序列记录,而不插入间隙,数据存储格式如下图:四、磁卡数据存储结构4.1每字节数据构成:二、三磁道数据每字节均由5bit构成,按照正向刷卡方向,数据构成结构如下图:正向刷卡正确的情况下,首先获得数据B0(即该字节最低位bit0),然后依次B1、B2、B3、P,其中P为该字节的奇偶校验位。如果逆向刷卡,则首先获得的是该字节的奇偶校验位。国标GB15120中规定磁卡采用奇校验,即保证每个字节中的1的个数为奇数个。磁卡数据中的起始、结束和纵向冗余校验字节本身都有奇偶校验。4.2数据构成:二三磁道数据构成结构都是一样的,即包括一个起始位、若干个数据位、一个结束位、一个冗余校验位,构成结构图如下图:对于正向刷卡过程,最先获得的是D0数据,也就是磁卡该磁道的起始标记位。而如果逆向刷卡,则首先得到的是校验位,即磁卡该磁道的最后一个有效数据。磁卡磁道最后一个字节为纵向冗余校验位。纵向冗余校验的规则是:磁卡数据每一个字节对应的位上的1的个数为偶数个。纵向冗余校验包含了起始、结束、分隔以及冗余校验字节本身,但是应当注意的是,冗余校验位只对数据位校验,对奇偶校验位不做冗余校验。注意:按照国标GB15120规定,磁卡二磁道数据最大40字节,磁卡三磁道数据最长107字节,各自包括1个起始位、1个结束位和1个冗余校验位,也就是说,磁卡二磁道有效数据最长不会超过37字节;三磁道有效数据最长不会超过104字节。五、磁卡硬件解码原理:按照磁卡数据构成格式,磁卡解码电路通过磁头检测到磁卡中磁信号在固定时间内磁信号的变化,将磁信号转化为0、1数据流输出,我们目前使用的磁卡解码芯片选用M3-2200-33(双磁道,工作电压为3.3V~5V),在刷卡开始时,系统进入刷卡模式,轮询磁卡时钟输出脚电平变化,在时钟下降沿读取1bit解码数据。M3-2200-33工作电压为3.3V5%,待机电流1.2mA,解码电路工作电压为1mA,解码速率为200bps~15000bps。工作时序如下:六、磁卡解码驱动设计原理:反推磁卡数据及磁卡刷卡流程,磁卡解码驱动应当包含如下几部分:获取磁卡数据(bit流)、解码、冗余校验。6.1获取数据:在C730-2驱动中,获取数据方式为:在刷卡过程中(硬件表现为磁卡解码芯片CLS信号输出低电平),在磁卡解码芯片时钟信号下降沿时读取1个bit数据。为了降低内存消耗,C730-2驱动中,在获取数据的同时,将数据按照16bit一个字节的方式存储,存储顺序为:先到bit存储在最高位,一个字节存满则启用下一个字节,即第一个bit存储在第一个字节的最高位上,依次类推。6.2解码过程:磁卡解码过程最重要的是获取起始位。GB15120中规定,二、三磁道的数据均以0X0B开始,0X0F结束,为了兼顾刷卡方向,解码程序涉及大致思想如下:在第一个非零数据位开始的前5个bit位解码为0X0B,而紧接着的下5bit解码不等于0X1F(最高位“1”为奇偶校验位),则判定该方向为正确的刷卡方向;如果不符合,则尝试逆向解码。如果正反向均解不出来,则判定该次解码失败。解码在获得启示字节之后,每5bit为一个字节,用奇偶校验判定每一个字节是否正确。程序以0X1F作为判定解码结束的依据,在获取到0X1F后且下一个字节(下5bit)奇偶检验正确,则判定解码过程结束,将磁卡数据送交冗余校验。程序存在的危险:在非常偶然条件下,刷卡过程出现错误造成某个字节为全1,而下一个字节的奇偶检验正确,非常巧合的情况下,上述获取的数据恰好能完成冗余校验,则此时我们把这错误数据当成了正确的解码数据,而且基本上没有其他手段来验证其正确性,只能依赖银行系统来验证。6.3纵向荣誉校验:纵向冗余校验算法思想很简单,就是将所有数据全部按位异或,若结果为0,则判定刷卡、解码正确,否则认定校验错误。