概述
磁条读取器 (MSR) 输入用于从“磁条”卡(如信用卡或借记卡)获取数据。当通过 MSR“刷卡”时,存储在黑色磁条上的信息将传输至设备。信息使用 ANSI x4.16 标准以开放格式编码,并且通常与运营商的身份和/或金融机构有关。DataWedge 可以从使用 ANSI x4.16 格式的大多数卡中获取并输出原始数据。对于同样符合 ISO 和美国银行家协会发布的 ISO/ABA 规格的卡,开发人员可以选择启用 Zebra 加密,以在获取数据时立即保护数据,并且在此后一直提供保护。在 Zebra 设备上启用此功能之后,无法禁用加密。
根据 ANSI 磁条标准,数据存储在卡上的三个磁道中。未加密的数据可从任何单个磁道或从所有三个磁道一次性获取。使用 Zebra“增强模式”加密的已加密数据也是如此。Zebra“原始模式”加密将所有三个磁道视为单个实体。
 MSR 卡编码的三种模式,其中两个包括加密 
 
启用加密
在设备上启用加密无法撤消。一旦已配置设备用于加密 ISO/ABA 数据,则它再也不会配置为输出原始 ISO/ABA 数据;在“原始”和“增强”加密模式之间的切换是此类设备唯一允许的更改。加密仅适用于 ISO/ABA 数据;所有其他 MSR 获取的数据都是使用“非 ISO 模式”以未加密的形式进行输出。
要了解如何启用加密和使用加密数据,请参阅 ID TECH SecureHead 用户手册。
兼容 Zebra 设备
以下 Zebra 设备可使用 DataWedge 获取(并可选择加密)MSR 数据:
- 带 MSR 的 MC40(型号 MC40N0-SLK3RM1)
 - 带 MSR 扣入式模块的 TC70/TC75(部件号 MSR-TC7X-SNP1-01)
 
查看所有 MC40 配置选项 (.pdf)。
MSR 输入
要启用 DataWedge 以接受 MSR 输入:
选中所需配置文件的 MSR 输入部分中的“已启用”框: 
 
 在“DWDemo”配置文件中启用 MSR 输入 
注意:DataWedge 还提供了蜂鸣音和其他反馈以指示扫描结果。有关更多信息,请参阅扫描参数部分。
MSR 输出
DataWedge 仅通过 Intent 输出 MSR 数据。无论获取的数据是“开放”或“加密”均如此。因此,接收应用程序必须能够接受和处理 Intent 捆绑包中的数据。为了帮助简化应用程序开发人员对 MSR 数据的使用,DataWedge 自动解析获取的数据,设置它的格式以适合特定用途,并将修改过的数据放到特定标签中。例如,用于打印收据的代码可能会使用其中一个“掩蔽数据 (ASCII)”标签,该标签将显示信用卡号码的所有内容,但最后四位显示为星号。
对于修改获取的数据,DataWedge 只提供下面各部分中所示的格式选项。在 ID TECH SecureHead 用户手册中可以找到所显示选项之外的用于设置数据格式的选项。自定义数据格式是开发人员的单方面负责的责任。
要获取 MSR 数据:
Intent.getStringtExtra()上面的方法调用将返回可从卡中读取的所有数据。下表列出了标签中包含的数据字段。
非 ISO 模式
非 ISO 模式是任何未启用加密的设备上的默认模式。此模式输出未加密的数据,与卡中读取的完全一样。其三个状态标签(在下面的映射表中)指示卡上每个相应磁道中的数据是否存在。
在启用加密的设备上,只有在读取不符合 ISO/ABA 标准的卡时才调用“非 ISO 模式”;在其他情况下此类卡中的数据使用“原始”或“增强”模式进行加密,否则将永远无法配置。
所有三个磁道中的 MSR 数据均包含在标签中: com.symbol.datawedge.msr_data
非 ISO 字段到标签映射
卡数据字段  | 
映射到 DataWedge 标签  | 
磁道 1 状态  | com.symbol.datawedge.msr_track1_status  | 
磁道 2 状态  | com.symbol.datawedge.msr_track2_status  | 
磁道 3 状态  | com.symbol.datawedge.msr_track3_status  | 
所有 MSR 数据(请参阅下面的字段表)  | com.symbol.datawedge.msr_data  | 
非 ISO 字段
字段编号  | 
说明  | 备注  | 
1  | STX  | 
  | 
2  | 长度  | 
  | 
3  | 卡编码类型  | 
  | 
4  | 磁道 1-3 状态  | 
  | 
5  | 磁道 1 未加密的长度  | 0 =“无磁道 1 数据存在”  | 
6  | 磁道 2 未加密的长度  | (始终存在)  | 
7  | 磁道 3 未加密的长度  | 0 =“无磁道 3 数据存在”  | 
8  | 磁道 1 数据  | (如果存在)  | 
9  | 磁道 2 数据  | (始终存在)  | 
10  | 磁道 3 数据  | (如果存在)  | 
11  | LRC  | 
  | 
12  | 校验和  | 
  | 
13  | ETX  | 
|
  | 
增强模式
Zebra 增强模式分别对每个磁道上的数据进行加密;如果需要,可以单独处理每个磁道上的数据。下面显示了获取数据的标签。
所有三个磁道中的 MSR 数据均包含在标签中: com.symbol.datawedge.msr_data
上面的标签返回卡中可读取的所有数据。下表列出了标签中包含的数据字段。
增强模式字段到标签映射
卡数据字段  | 映射到 DataWedge 标签  | 
磁道 1 状态  | com.symbol.datawedge.msr_track1_status  | 
磁道 2 状态  | com.symbol.datawedge.msr_track2_status  | 
磁道 3 状态  | com.symbol.datawedge.msr_track3_status  | 
磁道 1 加密的数据存在  | com.symbol.datawedge.msr_track1_encrypted_status  | 
磁道 2 加密的数据存在  | com.symbol.datawedge.msr_track2_encrypted_status  | 
磁道 3 加密的数据存在  | com.symbol.datawedge.msr_track3_encrypted_status  | 
磁道 1 掩蔽数据 (ASCII)  | com.symbol.datawedge.msr_track1  | 
磁道 2 掩蔽数据 (ASCII)  | com.symbol.datawedge.msr_track2  | 
磁道 3 掩蔽数据 (ASCII)  | com.symbol.datawedge.msr_track3  | 
所有 MSR 数据(有关详细信息,请参阅字段表)  | com.symbol.datawedge.msr_data  | 
磁道 1 加密数据(十六进制)  | com.symbol.datawedge.msr_track1_encrypted  | 
磁道 2 加密数据(十六进制)  | com.symbol.datawedge.msr_track2_encrypted  | 
磁道 3 加密数据(十六进制)  | com.symbol.datawedge.msr_track3_encrypted  | 
磁道 1 进行哈希处理  | com.symbol.datawedge.msr_track1_hashed  | 
磁道 2 进行哈希处理  | com.symbol.datawedge.msr_track2_hashed  | 
磁道 3 进行哈希处理  | com.symbol.datawedge.msr_track3_hashed  | 
DUKPT 序列号 (KSN)  | com.symbol.datawedge.msr_ksn  | 
增强模式字段
字段编号  | 说明  | 备注  | 
1  | STX  | 
  | 
2  | 长度  | 
  | 
3  | 卡编码类型  | 
  | 
4  | 磁道 1-3 状态  | 
  | 
5  | 磁道 1 未加密的长度  | 0 =“无磁道 1 数据存在”  | 
6  | 磁道 2 未加密的长度  | (始终存在)  | 
7  | 磁道 3 未加密的长度  | 0 =“无磁道 3 数据存在”  | 
8  | 未加密/掩蔽数据发送状态  | 
  | 
9  | 加密/哈希数据已发送状态  | 
  | 
10  | 磁道 1 已掩蔽  | (如果存在)  | 
11  | 磁道 2 已掩蔽  | (始终存在)  | 
12  | 磁道 3 已掩蔽  | (如果存在)  | 
13  | 磁道 1 已加密  | (如果存在)  | 
14  | 磁道 2 已加密  | (始终存在)  | 
15  | 磁道 3 已加密  | (如果存在)  | 
16  | 磁道 1 进行哈希处理  | (如果存在)  | 
17  | 磁道 2 进行哈希处理  | (始终存在)  | 
18  | 磁道 3 进行哈希处理  | (如果存在)  | 
19  | KSN(DUKPT 序列号)  | 
  | 
20  | LRC  | 
  | 
21  | 校验和  | 
  | 
22  | ETX  | 
  | 
原始模式
Zebra 原始模式将三个磁道上的数据加密为单个实体,防止磁道数据单独处理,除非下面描述中的标签包含 Zebra 根据最常见使用案例为便利创建的这些标签。将卡上所有三个磁道的可读取数据放置在标签 com.symbol.datawedge.msr_data 中,并且可以根据开发人员的需要进行解析。
下表列出了标签中包含的数据字段。
原始模式字段到标签映射
卡数据字段  | 映射到 DataWedge 标签  | 
磁道 1 状态  | com.symbol.datawedge.msr_track1_status  | 
磁道 2 状态  | com.symbol.datawedge.msr_track2_status  | 
磁道 3 状态  | com.symbol.datawedge.msr_track3_status  | 
磁道 1 掩蔽数据 (ASCII)  | com.symbol.datawedge.msr_track1  | 
磁道 2 掩蔽数据 (ASCII)  | com.symbol.datawedge.msr_track2  | 
磁道 3 掩蔽数据 (ASCII)  | com.symbol.datawedge.msr_track3  | 
所有 MSR 数据(有关详细信息,请参阅字段表)  | com.symbol.datawedge.msr_data  | 
磁道 1 加密数据(十六进制)  | com.symbol.datawedge.msr_track1_encrypted  | 
磁道 2 加密数据(十六进制)  | com.symbol.datawedge.msr_track2_encrypted  | 
磁道 3 加密数据(十六进制)  | com.symbol.datawedge.msr_track3_encrypted  | 
磁道 1 进行哈希处理  | com.symbol.datawedge.msr_track1_hashed  | 
磁道 2 进行哈希处理  | com.symbol.datawedge.msr_track2_hashed  | 
磁道 3 进行哈希处理  | com.symbol.datawedge.msr_track3_hashed  | 
DUKPT 序列号 (KSN)  | com.symbol.datawedge.msr_ksn  | 
原始模式字段
字段编号  | 说明  | 备注  | 
1  | STX  | 
  | 
2  | 长度  | 
  | 
3  | 卡编码类型  | 
  | 
4  | 磁道 1-3 状态  | 
  | 
5  | 磁道 1 未加密的长度  | 0 =“无磁道 1 数据存在”  | 
6  | 磁道 2 未加密的长度  | (始终存在)  | 
7  | 磁道 3 未加密的长度  | 0 =“无磁道 3 数据存在”  | 
8  | 磁道 1 已掩蔽  | (如果存在)  | 
9  | 磁道 2 已掩蔽  | (始终存在)  | 
10  | 磁道 3 数据  | (如果存在)  | 
11  | 加密数据  | 仅当磁道 1 和磁道 3 存在时才包括  | 
12  | 磁道 1 进行哈希处理  | (如果存在)  | 
13  | 磁道 2 进行哈希处理  | (始终存在)  | 
14  | KSN(DUKPT 序列号)  | 
  | 
15  | LRC  | 
  | 
16  | 校验和  | 
  | 
17  | ETX  | 
  | 
  | 
配置
以编程方式配置 MSR 并检索配置:
相关指南:
- DataWedge 配置文件 - 所有 DataWedge 输入、处理和输出选项指南
 - DataWedge API - 所有 DataWedge 支持的 Intent 使用规范
 - ID TECH SecureHead 用户手册 - ID TECH 的技术规范读取在 Zebra MSR 设备中使用的标题
 - ANSI x9.24-2016 - 加密密钥 (DUKPT) 规格