我有SPR332 pinpad阅读器,我必须在java上编写程序,验证银行卡的引脚。
这是我的PINverifyStructure:
bTimeOut = 0х00
bTimeOut2 = 0х00
bmFormatString = 0x82
bmPINBlockString = 0x47
bmPINLengthFormat = 0x04
wPINMaxExtraDigitMax = 0x0c
wPINMaxExtraDigitMin = 0x00
bEntryValidationCondition = 0x02
bNumberMessage = 0x01
wLangId = 0x09 0x04
bMsgIndex = 0x00
bTeoPrologue = 0x00 0x00 0x00
ulDataLength = apduLength 0x00 0x00 0x00
验证APDU命令是:
CLA = 0x00
INS = 0x20
P1 = 0x00
P2 = 0x00
LC = 0x08
0x20
0xff
0xff
0xff
0xff
0xff
0xff
0xff
此后我在pinpad上输入pin,然后我收到APDU响应6a86。在APDU响应规范中,它表示"错误的P1或P2参数。"
请帮助,我的命令有什么问题?
我将P2改为0x01,响应是相同的6a86
答案 0 :(得分:0)
请参阅EMV Book 3,6.5.12 VERIFY命令响应APDU。
P2应 0x80 - PlaintextPin或 0x88 - EncipheredPin。在你的情况下 - 0x80。
答案 1 :(得分:0)
我终于找到了为什么回复是6a81。
因为我有EMV卡,所以应该按特定顺序调用VERIFY命令(在SELECT FILE,GET PROCESSING OPTIONS,READ RECORD,GET DATA之后)。
现在我有9000. Thx all