一种磁条卡刷卡终端解码方法

文档序号:1477867 发布日期:2020-02-25 浏览:34次 >En<

阅读说明:本技术 一种磁条卡刷卡终端解码方法 (Decoding method for magnetic stripe card swiping terminal ) 是由 李滨滨 于 2019-11-05 设计创作,主要内容包括:本发明公开了一种磁条卡刷卡终端解码方法,所述磁条卡中设置有磁卡芯片,所述刷卡终端内设置有处理器;所述解码方法包括,S1、刷卡时,所述磁卡芯片与所述处理器相连,判断处理器监测是否发生中断;若是,则处理器关闭中断,开启超时计时并执行步骤S2;若否,则退出中断;S2、更新计时计数;S3、所述处理器读取其外部三个IO的电平状态,判断是否有IO发生电平跳变,若是,则将发生电平跳变的IO与该IO上次跳变的时间间隔记录到该IO对应的数组中,各所述IO分别对应一个磁道,各磁道分别对应一个T数组,并执行S4;若否,则直接执行S4;等步骤。优点是:增加了解码的成功率,降低了上报误码概率,降低了设计成本,改善了用户使用体验。(The invention discloses a decoding method for a magnetic stripe card swiping terminal, wherein a magnetic card chip is arranged in a magnetic stripe card, and a processor is arranged in the card swiping terminal; s1, when the card is swiped, the magnetic card chip is connected with the processor to judge whether the processor monitors interruption; if yes, the processor closes the interrupt, starts the timeout timer and executes the step S2; if not, exiting the interruption; s2, updating the timing count; s3, the processor reads the level states of three external IOs, judges whether the IO has level jump or not, if so, records the IO with level jump and the time interval of the last jump of the IO into an array corresponding to the IO, each IO corresponds to one magnetic track, each magnetic track corresponds to one T array, and executes S4; if not, directly executing S4; and the like. The advantages are that: the success rate of decoding is increased, the probability of reporting error codes is reduced, the design cost is reduced, and the user experience is improved.)

一种磁条卡刷卡终端解码方法

技术领域

本发明涉及电子通信、金融支付领域,尤其涉及磁条卡刷卡终端解码方法。

背景技术

日常生活中,磁条卡作为信息记录的载体,具体低成本、高强度、携带便捷稳定可靠。被广泛的应用在各种银行卡、礼品卡、交通卡等领域。金融终端作为一种读卡装置,能够识读磁条卡。但是随着应用的广泛,也带来了一些问题。如我们的磁条卡使用一段时间后,因为磨损造成识别率降低;使用者的刷卡速度不一致,正反刷习惯不同,造成磁卡不容易被设备识读;为了保证读卡识读率在设计时增加了很多软硬件功能,增加了成本。

发明内容

本发明的目的在于提供磁条卡刷卡终端解码方法,从而解决现有技术中存在的前述问题。

为了实现上述目的,本发明采用的技术方案如下:

一种磁条卡刷卡终端解码方法,所述磁条卡中设置有磁卡芯片,所述刷卡终端内设置有处理器;所述解码方法包括,

S1、刷卡时,所述磁卡芯片与所述处理器相连,判断处理器监测是否发生中断;若是,则处理器关闭中断,开启超时计时并执行步骤S2;若否,则退出中断;

S2、更新计时计数;

S3、所述处理器读取其外部三个IO的电平状态,判断是否有IO发生电平跳变,若是,则将发生电平跳变的IO与该IO上次跳变的时间间隔记录到该IO对应的数组中,各所述IO分别对应一个磁道,各磁道分别对应一个T数组,并执行S4;若否,则直接执行S4;

S4、所述处理器判断超时计时是否超过预设时长,若是,则执行步骤S5;若否,则返回步骤S2;

S5、所述处理器拷贝一个磁道的T数组内容到p数组中;

S6、所述处理器将所述p数组中的时间间隔数据解码为二进制数据,并所述二进制数据存储在m数组中;

S7、所述处理器将所述二进制数据按编码格式进行解码,以获取解码数据,并将解码数据存储在m_bit数组中,将所述解码数据按照查表方式找到与其对应的ASCII码,以获取对应数据,并将对应数据存储在out数组中;

S8、所述处理器对解码数据和对应数据进行校验处理,若校验通过,则执行步骤S9;若校验失败,则执行步骤S10;

S9、所述处理器将所述对应数据转存到全局数据中,所述处理器置位该磁道刷卡成功标志,并执行步骤S11;

S10、所述处理器置位该磁道刷卡失败标志,并执行步骤S11;

S11、重复步骤S5至S10;并判断三个磁道对应的T数组是否全部解析完成,若是,则退出中断;若否,则返回步骤S5。

优选的,步骤S6中所述处理器将所述p数组中的时间间隔数据解码为二进制数据,具体为,

A1、获取所述p数组的数组指针p,设置待解码时间间隔数据长度为len,初始基准值为bitlen;

A2、定义计数值为I,j,并给i和j均赋予初值为0;定义标志位第一skip,第二skip,并给第一skip和第二skip均赋予初值为0;

A3、判断i是否小于len-1,若是,则执行步骤S44;若否,则执行步骤A4;

A4、判断第一skip是否等于0,若是,则执行S47,若否,则执行A5;

A5、将第一skip赋值为0;

A6、i值加1,返回S43;

A7、判断p[i]<bitlen*0.7,即判断p的第i位是否小于基准值bitlen的0.7倍;若是,则执行A8;若否,则执行A11;

A8、判断p[i+1]<bitlen*0.7,即判断p的第i+1位是否小于基准值bitlen的0.7倍;若是,则执行A9;若否,则执行A11;

A9、判断p[i]+p[i+1]<1.4*bitlen,即判断p的第i位和i+1位的数据和是否小于基准值的1.4倍;若是,则执行A10;若否则执行A11;

A10、更新bitlen,计算bitlen=bitlen*0.8+(p[i]+p[i+1])*0.2;即取原基准值80%权重加上p的第i位与第i+1位和的20%权重作为新的基准值;执行m[j++]=1,第二Skip=1,即解码结果为1,将该数据记录在所述m数组的j位置,同时j的值加1,第二Skip置位为1;并跳转A6;

A11、判断p[i]<bitlen*0.8,即判断p的第i位数据是否小于基准值bitlen的0.8倍;若是,则执行S412;若否,则执行A13;

A12、执行p[i+1]=p[i+1]-((Bitlen-p[i])*0.8),即将p的第i+1位的数据更新为p的第i+1位数据减去基准值与p的i位数据差值的80%权重;

A13、执行BItlen=BItlen*0.8+p[i]*0.2m[j++]=0,即解码结果为0,记录到m数组的j位,计数值j增加1;跳转执行A6;

其中,p表示p数组的数组指针;m表示m数组;len为待解码时间间隔数据长度;bitlen为初始基准值;I为p数组的计数值;j为m数组的计数值;第一skip为p数组的标志位,第二skip为m数组的标志位;skip表示是否跳过当前标志位。

优选的,步骤S7中将二进制数据转换为ASCII码过程,具体为,

B1、将参数m、len、ch、out代入第一解析函数;

B2、将i,j作为计数值,分别记录待解码二进制数据位置和存储ASCII码的位置;将i、j、start、c赋初值为0;

B3、判断i是否小于len,若是,则i加1;若否,则i加1后执行B6;

B4、判定m中的第i位是否为非0,若是,则执行B5;若否,则执行B3;

B5、将数据i赋值给start,表示将当前的位置赋给start;

B6、判断ch是否为0,即判断当前磁道是否为1磁道;若是,则执行B7;若否,则执行B9;

B7、更新计数值i为start的记录值;

B8、判断i是否小于len-5的差值,若是,则执行B10;若否,则执行B9;

B9、更新计数值i为start的记录值,执行B15;

B10、计算

c=(m[i+6]<<6)+(m[i+5]<<5)+(m[i+4]<<4)+(m[i+3]<<3)+(m[i+2]<<2)+(m[i+1]<<1)+(m[i]);即从m的i位置开始取7个数据,按公式计算值并赋给c;

B11、将c的最高bit位清0;

B12、将字符c代入到表格track1cset中,看c表示的位置是否为非0,若是,则执行B14;若否,则执行B13;

B13、i值加1,跳转执行A8;

B14、将表格中c位置的数据赋值给out数组的j位,记录c的值到数组m_bit数组中,j加1;

B15、判断i值是否小于len-5的差值,若是则执行B16;若否,则执行B21。

B16、计算

c=(m[i+4]<<4)+(m[i+3]<<3)+(m[i+2]<<2)+(m[i+1]<<1)+(m[i]),即从m的i位置开始取5个数据,按公式计算值并赋给c;

B17、将c的最高3个bit位清0;

B18、将c代入表格track3cset,判断表格中c位置的数据是否为非0,若是,则执行B19;若否,则执行B20;

B19、将表格中c位置的值赋值给out数组中的j位,记录c的值到数组m_bit数组中,j加1;

B20、i加1,跳转执行B15;

B21、将out数组中j-1位置的值赋值为0;

B22、将j的值返回,退出第一解析函数;

其中,m为m数组;len为二进制数据解码到的数据长度;ch为磁道号;Start为磁道有效数据位置;c为当前解码的结果;i为m数组中的计数值;j为out数组中的计数值。

优选的,步骤S8中所述处理器对解码数据和对应数据进行校验处理,具体为,

C1、将参数m_bit数组、size、ch代入第二解析函数。

C2、定义lrc,并赋值为0;定义lrc_p,赋值为0;定义编码长度值bits,定义计数值i、j;

C3、判断ch是否为0,即判定当前是否处理的为0磁道;若是,则执行C5;若否,则执行C4;

C4、startb赋值为0x0b;endb赋值为0x1f;bits赋值为4;即判断数据的起始位标志位0x0b,结束标志位0x1f,数据长度为4,执行C6;

C5、startb赋值为0x45;endb赋值为0x1f;bits赋值为6;即判断数据的起始位标志位0x45,结束标志位0x1f,数据长度为6;

C6、判断m_bit[0]是否等于startb,即判断数据头是否正确;若是,则执行C7;若否,则执行C23;

C7、将计数值i赋值为0;

C8、判断i是否小于size,若是,则执行C9;若否,则执行C12;

C9、按公式计算lrc,lrc=lrc^m_bit[i];即计算有效数据的lrc异或和;

C10、判断m_bit数组中i位的值是否等于endb,即判断是否找到结束标志;若是,则执行C13;若否,则执行C11;

C11、i值加1;跳转执行C8;

C12、判断m_bit数组中i位的值是否等于endb,即判断是否找到结束标志;若是,则执行B13;若否则执行C22;

C13、将j赋值为0;

C14、判断j是否小于bits,若是,则执行B15;若否,则执行C17;

C15、按公式计算lrc_p^=(lrc&(1<<j))>>j;

C16、j值加1;跳转执行C14;

C17、按公式计算lrc_p^=1;

C18、按公式计算lrc&=(1<<bits)-1;lrc=lrc|(lrc_p<<bits);

C19、判断m_bit[i+1]是否等于lrc,即判断lrc值是否正确;若是,则执行C20;若否,则执行C21;

C20、返回数据值0;

C21、返回数据值3;

C22、返回数据值2;

C23、返回数据值1;

其中,size为数据长度;ch为磁道数据;startb为磁道起始数据;endb为磁道结束数据;lrc为校验字节;lrc_p为校验字节的奇偶位;bits为数据编码长度标志;i为m_bit数组的计数值;j为第二解析函数的计数值。

本发明的有益效果是:增加了解码的成功率,降低了上报误码概率,降低了设计成本,改善了用户使用体验。

附图说明

图1是本发明实施例中解码方法的流程示意图;

图2是本发明实施例中处理器与磁卡芯片的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不用于限定本发明。

如图1至图2所示,本实施例中提供了一种磁条卡刷卡终端解码方法,所述磁条卡中设置有磁卡芯片,所述刷卡终端内设置有处理器;所述解码方法包括,

S1、刷卡时,所述磁卡芯片与所述处理器相连,判断处理器监测是否发生中断;若是,则处理器关闭中断,开启超时计时并执行步骤S2;若否,则退出中断;

S2、更新计时计数;

S3、所述处理器读取其外部三个IO的电平状态,判断是否有IO发生电平跳变,若是,则将发生电平跳变的IO与该IO上次跳变的时间间隔记录到该IO对应的数组中,各所述IO分别对应一个磁道,各磁道分别对应一个T数组,并执行S4;若否,则直接执行S4;

S4、所述处理器判断超时计时是否超过预设时长,若是,则执行步骤S5;若否,则返回步骤S2;

S5、所述处理器拷贝一个磁道的T数组内容到p数组中;

S6、所述处理器将所述p数组中的时间间隔数据解码为二进制数据,并所述二进制数据存储在m数组中;

S7、所述处理器将所述二进制数据按编码格式进行解码,以获取解码数据,并将解码数据存储在m_bit数组中,将所述解码数据按照查表方式找到与其对应的ASCII码,以获取对应数据,并将对应数据存储在out数组中;

S8、所述处理器对解码数据和对应数据进行校验处理,若校验通过,则执行步骤S9;若校验失败,则执行步骤S10;

S9、所述处理器将所述对应数据转存到全局数据中,所述处理器置位该磁道刷卡成功标志,并执行步骤S11;

S10、所述处理器置位该磁道刷卡失败标志,并执行步骤S11;

S11、重复步骤S5至S10;并判断三个磁道对应的T数组是否全部解析完成,若是,则退出中断;若否,则返回步骤S5。

本实施例中,步骤S1中,处理器IO会因为刷卡事件会被磁卡芯片影响产生跳变,处理器的IO跳变会触发监控中断。参考图2可知,所述处理器中包括三个IO,每个IO都对应着一个磁道,每个磁道都对应着一个T数组,三个IO分别为IO1、IO2、IO3,对应的T数组分别为T1数组、T2数组和T3数组。任意一个IO发生跳变,都会引起处理器中断。

本实施例中,步骤S4中,超时计时超过预设时长,表示超时计时时间内三个IO均为发生跳变。所述预设时长可以根据实际需要具体设置,以便更好的满足实际需求。

本实施例中,步骤S6中所述处理器将所述p数组中的时间间隔数据解码为二进制数据,具体为,

A1、获取所述p数组的数组指针p,设置待解码时间间隔数据长度为len,初始基准值为bitlen;

A2、定义计数值为I,j,并给i和j均赋予初值为0;定义标志位第一skip,第二skip,并给第一skip和第二skip均赋予初值为0;

A3、判断i是否小于len-1,若是,则执行步骤S44;若否,则执行步骤A4;

A4、判断第一skip是否等于0,若是,则执行S47,若否,则执行A5;

A5、将第一skip赋值为0;

A6、i值加1,返回S43;

A7、判断p[i]<bitlen*0.7,即判断p的第i位是否小于基准值bitlen的0.7倍;若是,则执行A8;若否,则执行A11;

A8、判断p[i+1]<bitlen*0.7,即判断p的第i+1位是否小于基准值bitlen的0.7倍;若是,则执行A9;若否,则执行A11;

A9、判断p[i]+p[i+1]<1.4*bitlen,即判断p的第i位和i+1位的数据和是否小于基准值的1.4倍;若是,则执行A10;若否则执行A11;

A10、更新bitlen,计算bitlen=bitlen*0.8+(p[i]+p[i+1])*0.2;即取原基准值80%权重加上p的第i位与第i+1位和的20%权重作为新的基准值;执行m[j++]=1,第二Skip=1,即解码结果为1,将该数据记录在所述m数组的j位置,同时j的值加1,第二Skip置位为1;并跳转A6;

A11、判断p[i]<bitlen*0.8,即判断p的第i位数据是否小于基准值bitlen的0.8倍;若是,则执行S412;若否,则执行A13;

A12、执行p[i+1]=p[i+1]-((Bitlen-p[i])*0.8),即将p的第i+1位的数据更新为p的第i+1位数据减去基准值与p的i位数据差值的80%权重;

A13、执行BItlen=BItlen*0.8+p[i]*0.2m[j++]=0,即解码结果为0,记录到m数组的j位,计数值j增加1;跳转执行A6;

其中,p表示p数组的数组指针;m表示m数组;len为待解码时间间隔数据长度;bitlen为初始基准值;I为p数组的计数值;j为m数组的计数值;第一skip为p数组的标志位,第二skip为m数组的标志位;skip表示是否跳过当前标志位。

本实施例中,步骤S7中将二进制数据转换为ASCII码过程,具体为,

B1、将参数m、len、ch、out代入第一解析函数;

B2、将i,j作为计数值,分别记录待解码二进制数据位置和存储ASCII码的位置;将i、j、start、c赋初值为0;

B3、判断i是否小于len,若是,则i加1;若否,则i加1后执行B6;

B4、判定m中的第i位是否为非0,若是,则执行B5;若否,则执行B3;

B5、将数据i赋值给start,表示将当前的位置赋给start;

B6、判断ch是否为0,即判断当前磁道是否为1磁道;若是,则执行B7;若否,则执行B9;

B7、更新计数值i为start的记录值;

B8、判断i是否小于len-5的差值,若是,则执行B10;若否,则执行B9;

B9、更新计数值i为start的记录值,执行B15;

B10、计算

c=(m[i+6]<<6)+(m[i+5]<<5)+(m[i+4]<<4)+(m[i+3]<<3)+(m[i+2]<<2)+(m[i+1]<<1)+(m[i]);即从m的i位置开始取7个数据,按公式计算值并赋给c;

B11、将c的最高bit位清0;

B12、将字符c代入到表格track1cset中,看c表示的位置是否为非0,若是,则执行B14;若否,则执行B13;

B13、i值加1,跳转执行A8;

B14、将表格中c位置的数据赋值给out数组的j位,记录c的值到数组m_bit数组中,j加1;

B15、判断i值是否小于len-5的差值,若是则执行B16;若否,则执行B21。

B16、计算

c=(m[i+4]<<4)+(m[i+3]<<3)+(m[i+2]<<2)+(m[i+1]<<1)+(m[i]),即从m的i位置开始取5个数据,按公式计算值并赋给c;

B17、将c的最高3个bit位清0;

B18、将c代入表格track3cset,判断表格中c位置的数据是否为非0,若是,则执行B19;若否,则执行B20;

B19、将表格中c位置的值赋值给out数组中的j位,记录c的值到数组m_bit数组中,j加1;

B20、i加1,跳转执行B15;

B21、将out数组中j-1位置的值赋值为0;

B22、将j的值返回,退出第一解析函数;

其中,m为m数组;len为二进制数据解码到的数据长度;ch为磁道号;Start为磁道有效数据位置;c为当前解码的结果;i为m数组中的计数值;j为out数组中的计数值。

本实施例中,步骤S8中所述处理器对解码数据和对应数据进行校验处理,具体为,

C1、将参数m_bit数组、size、ch代入第二解析函数。

C2、定义lrc,并赋值为0;定义lrc_p,赋值为0;定义编码长度值bits,定义计数值i、j;

C3、判断ch是否为0,即判定当前是否处理的为0磁道;若是,则执行C5;若否,则执行C4;

C4、startb赋值为0x0b;endb赋值为0x1f;bits赋值为4;即判断数据的起始位标志位0x0b,结束标志位0x1f,数据长度为4,执行C6;

C5、startb赋值为0x45;endb赋值为0x1f;bits赋值为6;即判断数据的起始位标志位0x45,结束标志位0x1f,数据长度为6;

C6、判断m_bit[0]是否等于startb,即判断数据头是否正确;若是,则执行C7;若否,则执行C23;

C7、将计数值i赋值为0;

C8、判断i是否小于size,若是,则执行C9;若否,则执行C12;

C9、按公式计算lrc,lrc=lrc^m_bit[i];即计算有效数据的lrc异或和;

C10、判断m_bit数组中i位的值是否等于endb,即判断是否找到结束标志;若是,则执行C13;若否,则执行C11;

C11、i值加1;跳转执行C8;

C12、判断m_bit数组中i位的值是否等于endb,即判断是否找到结束标志;若是,则执行B13;若否则执行C22;

C13、将j赋值为0;

C14、判断j是否小于bits,若是,则执行B15;若否,则执行C17;

C15、按公式计算lrc_p^=(lrc&(1<<j))>>j;

C16、j值加1;跳转执行C14;

C17、按公式计算lrc_p^=1;

C18、按公式计算lrc&=(1<<bits)-1;lrc=lrc|(lrc_p<<bits);

C19、判断m_bit[i+1]是否等于lrc,即判断lrc值是否正确;若是,则执行C20;若否,则执行C21;

C20、返回数据值0;

C21、返回数据值3;

C22、返回数据值2;

C23、返回数据值1;

其中,size为数据长度;ch为磁道数据;startb为磁道起始数据;endb为磁道结束数据;lrc为校验字节;lrc_p为校验字节的奇偶位;bits为数据编码长度标志;i为m_bit数组的计数值;j为第二解析函数的计数值。

通过采用本发明公开的上述技术方案,得到了如下有益的效果:

本发明提供了一种磁条卡刷卡终端解码方法,该方法增加了解码的成功率,降低了上报误码概率,降低了设计成本,改善了用户使用体验。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视本发明的保护范围。

15页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:自动售货方法、自动售货机及服务器

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!