Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92796
  • 博文数量: 73
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 235
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-27 09:43
  • 认证徽章:
个人简介

为兴趣挑灯夜战

文章分类
文章存档

2018年(4)

2017年(7)

2016年(9)

2015年(4)

2014年(49)

分类: C/C++

2017-07-23 13:32:43


所谓磁卡软件解码就是指不通过专用解码芯片,而是通过用软件的方式来实现,这样灵活度高,成本也大大降低了,所有目前专业做这一行的公司都实现了自己的软解码技术,像目前大多数POS上都是用软解码。虽然需要实现这个技术的公司已经很少了,但我还是在此分享一下最近的成果。
磁卡最常见算是银行卡了,虽然国内已逐渐淘汰磁条卡,但短时间内还会存在,还有国外还在大量的使用。磁条卡有有好几种标准,这里就以ISO7811来讲,但也只能是大概描述一下,因为这不是本文的重点。另外,读此文的读者是不需要在此学习这些标准的。简单的来说,银行卡上的词条实际上有三个轨道,最外侧的为1轨,往内数分别为1、2、3轨。1轨和3轨的记录密度相同且比2轨的高;1轨用7个位表示一个字符,最高位是奇校验,2、3用5个位表示一个字符,最高位是奇校验。每个轨道的数据都有起始符合结束符。数据在磁条上的记录是以曼且斯特编码格式记录的,解码的过程就是要正确识别词条上的曼码信息。曼码的特点是,一个比特位,如果是0,则电平是在时钟周期末尾翻转,如果是1,则在时钟周期中间翻转,所以,从波形上看,0的波形是一个高电平或者一个低电平,1的波形是一个低电平加一个高电平。但是,从磁头采集到的原始信号并不能直接使用,而是要经过放大、整形最终通过触发器才能转化为可识别的信号。

图1:磁头采集到的磁条信号
图一中的信号是经过放大30倍后的信号,这个信号的大小差异比较大,首先要看磁信息的强度,其次要看刷卡的速度,所以,磁头输出的信号在几个毫伏到上百毫伏之间。这个信号需去掉直流成分,也就是串联一个电容。去掉直流成分的信号需要再次放大,这一次的放大倍数很大,而且要在反馈电阻上并联两个一正一反的二极管,目的是为了限制幅度,这一步我称称它为整形。

图2:整形后的信号
整形后的信号还需要再做一步处理才能提供给单片机采集,这一步我称其为触发。将图2中的信号接入斯密特触发器就能得到我们最终想要的波形了,触发后的波形如图3所示:

图3:触发后的波形
下面再来看一张3个步骤同步的波形图片