通过ISO 7816 APDU指令读取Visa卡卡号及有效期遇6700错误求助
问题分析:6700响应码原因
6700表示APDU指令的长度参数(LC)与实际数据长度不匹配。你当前发送的Visa卡GPO指令(80A8000012...)中,LC字段是12(十进制18),但后续的TLV数据实际长度不符合这个值,导致卡片返回长度错误。
Visa卡读取卡号&有效期的可行APDU指令列表
以下是针对Visa EMV卡验证有效的指令流程,分三种常用方式:
方式一:EMV标准流程(GPO + 读记录)
步骤1:选择Visa应用(SELECT AID)
Visa默认AID为A0000000031010,发送指令:
00A4040007A000000003101000
响应码应为9000,表示应用选择成功。
步骤2:发送GET PROCESSING OPTIONS(GPO)
使用长度匹配的标准指令(无PDOL数据场景):
80A8000002830000
- 说明:LC为
02,对应后续8300(表示无PDOL数据),长度严格匹配,不会触发6700。
响应码应为9000,返回的TLV包含应用交互控制、文件控制信息等。
步骤3:读取记录获取卡号与有效期
Visa卡的卡号(5A标签)和有效期(5F24标签)通常在1号记录的14号文件中,发送读记录指令:
00B2011400
从响应中提取5A值为卡号,5F24值为有效期(格式为YYMM,可按需转换为MMYY)。
方式二:直接读取指定标签(GET DATA)
若卡片支持,SELECT AID成功后可直接读取目标标签:
步骤1:选择Visa应用(同方式一)
00A4040007A000000003101000
步骤2:读取卡号(5A标签)
00CA005A00
响应中5A对应的值即为卡号。
步骤3:读取有效期(5F24标签)
00CA005F2400
响应中5F24对应的值为有效期(格式YYMM)。
方式三:兼容老Visa卡的指令
部分非EMV老卡可尝试以下流程:
步骤1:选择主文件
00A40000023F0000
步骤2:选择卡号文件
00A4010002000100
步骤3:读取卡号
00B000000F
返回的前16字节为卡号,按需截取即可。
步骤4:读取有效期
00B0001E02
返回的2字节为有效期(格式YYMM)。
注意事项
- 所有指令必须保证LC字段与后续数据长度严格匹配,避免再次触发6700错误。
- 若默认AID选择失败,可尝试
A000000003101001或咨询卡片发行方获取正确AID。 - 处理响应时,需先确认响应码为
9000,再提取对应标签值。
内容的提问来源于stack exchange,提问作者maxmvaas
相关产品推荐
相关产品推荐

