磁条卡基础

3 篇文章 0 订阅
1 篇文章 0 订阅

接触一个知识就得记录下来,经验之谈很重要,隔一段时间就只记得自己干过这事,却不记得具体是啥事了。

谈谈物理原理

1、磁有正反两级,接触强磁可以改变附着材料的极性。这就是写磁道。

2、磁头通电,信号在经过放大,磁卡刷过时会得到如下的模拟信号。

如下是磁道3的数据

 蓝色-磁头输入信号放大后的波形

黄色-峰值检测电路后二值化的波形

 开始刷卡时的波形(包含干扰信号和前导0)

 开始有数据了

磁道bit编码规则

 一句话概括:一个bit周期内有电平翻转,记作1,无电平翻转记作0.

那如何知道bit周期呢?所以就需要前导0,没注意到规范里要多少个前导0,建议10个以上。

每个bit-0占用一个bit周期,当找到足够多基本相同周期的脉宽,就标记为前导0,其周期就为bit周期。


 磁道数据编码规则

  • 磁道1的记录密度为210 bpi(8.27bits/mm),797位的二进制码(6ALPHA编码+1位奇校验位)
  • 磁道2的记录密度为75bpi(2.95bits/mm),405位的二进制码(4BCD编码+1位奇校验位)
  • 磁道3的记录密度为210bpi(8.27bits/mm),1075位二进制码(4BCD编码+1位奇校验位)

 有了上面的规范及理论支持,就来解一解数据

  磁道3的起始字符为 ' ; ' ,bit存储由低位在前,拉开为 11010,从上就找到了起始信号。之后依次解析两个数据 00001=> 0 ,  00001=> 0 

一直找到结束字符 '?'为止,字符'?'后一个为LRC校验,用于校验整个磁道数据的正确性。

 实际的三轨道数据如下,这么多数据当然要交给代码。

 编码解析bit

人眼可见,能直观看出脉宽长短,可见bit(0),bit(1).但是机器实现起来就有点不简单了。

如何分析出脉宽是0还是1。对机器而言得有规则。

ISO/IEC 7811-2: 2001(E)中有做规定,有条件可以自行查看

 

规则中限定 0,85 Bin Bin+1 1,15 Bin,0,70 Bin/2 Sin+1 1,30 Bin/2,

上表允许脉宽实际和理论有15%的偏差。但实际受刷卡速度以及其他外界的干扰,并非如此理想。

刷卡速度不是稳定的,bit周期会变。所以我实际使用的规则如下:

解算磁道bit时会最多使用新的4个脉宽时间作为对比,四个脉宽时间记作d_0,d_1,d_2,d_3,2个bit周期记作Preiod

定义:

sum0_1 = d_0 +d_1

sum0_2 = sum0_1 + d_2

sum0_3 = sum0_2 +d_3

sum1_2 = d_1 +d_2

规则1、(d_0  > sum1_2 * 3 / 4)  时, d_0 记作 bit(0)

规则2、(d_2 > sum0_1 * 3 / 4)  时,d_0,d_1记作 bit(1) d_2 记作bit(0) ,更新Preiod = sum0_2

规则3、(d_0 >  d_2  * 2 * 3 / 4 &&  d_1 >  d_2  * 2 * 3 / 4 && d_2 <  d_3 * 5 / 4 && d_2  > track-> d_3 * 3 / 4)   时,d_0记作bit(0),d_1记作bit(0),d_2、d_3记作bit(1)   Preiod = sum0_3 * 2 / 3;

 前三个规则都是采用前后脉宽的比列关系做一次筛选。后面用bit周期做筛选标准。

规则4、 Preiod <= sum0_1 时,d_0记作bit(0),d_1记作bit(0)  ,更新Preiod = sum0_1

 还有很多规则就不一一陈述,越到后面,所渗透下来的数据就越离谱。

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值