第一章 磁条卡基础:从物理结构到数据格式

各位同学好,我是老张。做嵌入式这些年,跟磁条卡读卡器打了不下十年交道。今天咱们聊聊磁条卡的基础知识。别看这玩意儿现在被芯片卡抢了风头,但在POS机领域,磁条卡读卡器依然是标配——毕竟存量太大了。

说白了,磁条卡就是个带磁条的塑料卡片。但这里面的门道,比你想象的多。

1.1 磁条卡的物理结构

磁条卡由三部分组成:基片、磁条和保护层。基片通常是PVC材质,厚度0.76mm左右——这是ISO标准规定的。磁条呢,是涂覆在卡片背面的磁性材料,宽度大约6mm。

我记得刚入行那会儿,有个项目死活读不出卡。折腾了两天,最后发现是磁条磨损太严重。嗯,这里要提醒大家:磁条是消耗品,读写次数多了会退化。

关键尺寸:

  • 卡片尺寸:85.6mm × 53.98mm(ISO 7810 ID-1标准)
  • 厚度:0.76mm ± 0.08mm
  • 磁条宽度:6mm(Track1+Track2+Track3共用)
  • 磁条位置:距卡片上边缘约4mm

磁条上分布着三个磁道。你可能会问:为什么是三个?其实早期只有两个,后来为了扩展功能才加了第三个。我个人习惯把磁道想象成三条并排的跑道,每条跑道上跑着不同的数据。

1.2 磁道数据格式详解

三个磁道,各有各的规矩。咱们一个一个说。

Track1(磁道一)

Track1是密度最高的磁道,记录密度210BPI(每英寸比特数)。它用7位编码(含1位奇偶校验),能存79个字符。说白了,它主要存字母数字混合信息。

格式长这样:

起始符 + 主账号 + 分隔符 + 姓名 + 分隔符 + 过期日期 + 服务代码 + 其他数据 + 结束符 + LRC

举个例子:

%B1234567890123456^ZHANG/SAN.^2405121000000000000000? 
其中:
% 是起始符
B 是格式代码(表示银行/金融卡)
^ 是分隔符
? 是结束符
最后一位是LRC校验

我的经验:Track1的姓名域经常出问题。有些卡发行方会在姓名里加特殊字符,比如连字符、点号。我曾经遇到过一个客户,名字里有"O'Brien",结果读卡器解析到单引号就崩了。所以驱动里一定要做好异常字符过滤。

Track2(磁道二)

Track2是POS机最常用的磁道。密度75BPI,用5位编码(含1位奇偶校验),能存40个字符。它只支持数字0-9,以及分隔符"="和">"。

格式更简洁:

起始符 + 主账号 + 分隔符 + 过期日期 + 服务代码 + 其他数据 + 结束符 + LRC

实际数据长这样:

;1234567890123456=24051210000000000000?
; 是起始符
= 是分隔符
? 是结束符

注意:Track2没有姓名字段。很多新手以为Track2能读出持卡人姓名,其实不行。姓名只在Track1里。我见过有人写驱动时把Track2的姓名域解析成乱码,就是因为没搞清楚这个区别。

Track3(磁道三)

Track3密度跟Track2一样,也是75BPI,但能存107个字符。它主要用于一些特定应用场景,比如ATM机的离线交易记录。说实话,我在POS机项目里用到Track3的情况很少,大概十次里有一次吧。

格式:

起始符 + 主账号 + 分隔符 + 国家代码 + 货币代码 + 其他数据 + 结束符 + LRC

1.3 ISO 7810/7811标准解读

这两个标准是磁条卡的"宪法"。不读懂它们,你写的驱动就是空中楼阁。

标准编号 内容 我的理解
ISO 7810 卡片物理尺寸、厚度、弯曲强度等 决定了读卡器的机械结构怎么设计
ISO 7811-1 磁条物理特性(矫顽力、剩磁等) 决定了读卡磁头的电气参数
ISO 7811-2 磁道位置、宽度、间距 决定了磁头对准精度要求
ISO 7811-3 Track1编码方式(7位+奇偶) 决定了数据解码算法
ISO 7811-4 Track2/Track3编码方式(5位+奇偶) 同上,但位宽不同
ISO 7811-5 数据格式、起始符/结束符定义 决定了数据帧结构

这里有个坑,我当年踩过。ISO 7811-2规定磁道间距是2.92mm,但有些非标卡会偏离这个值。如果你的读卡器磁头固定死了,遇到这种卡就可能读不出来。所以我现在设计驱动时,都会加一个磁道偏移校准功能。

1.4 数据校验机制

磁条卡数据不是裸奔的,它有一套校验体系:

  • 奇偶校验:每个字符都有1位奇偶位,确保数据完整性
  • LRC校验:纵向冗余校验,对整个数据块做异或运算
  • 格式校验:检查起始符、结束符、分隔符是否合法

为什么需要这么多校验?你想想看,磁条卡是靠磁头划过磁条来读数据的。刷卡速度快慢、磁条脏污、电磁干扰,都会导致数据出错。没有校验,你读出来的可能就是一堆乱码。

避坑指南:我曾经遇到一个案例,读卡器在冬天老是报错。排查后发现是静电干扰导致LRC校验失败。解决方案是在驱动里加了一个重试机制——如果LRC校验失败,自动重读3次。成功率从82%提升到了99.5%。

1.5 实际开发中的注意事项

最后,分享几个我在项目中积累的经验:

  1. 不要假设数据完美:磁条卡数据经常有噪声,驱动里要做好容错处理
  2. 注意刷卡方向:磁条朝下、朝前刷卡是标准方向,但有些用户会反着刷
  3. 处理空数据:有些卡只有Track2,没有Track1。驱动要能优雅处理
  4. 速度自适应:不同人刷卡速度差异很大,驱动要能自适应

好了,第一章就到这里。磁条卡的基础知识是后面所有章节的基石。下一章咱们聊磁头的工作原理和信号调理电路——那才是真正跟硬件打交道的地方。

公众号:蓝海资料掘金营,微信deep3321