我有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 相同
参见EMV第3册,6.5.12验证命令响应APDU。
P2应为0x80-PlaintextPin或0x88EncipheredPin。在您的情况下-0x80。
我终于找到了为什么响应是6a81。
这是因为我有EMV卡,所以VERIFY命令应该按特定顺序调用(在SELECT FILE、GET PROCESSING OPTIONS、READ RECORD、GET DATA之后)。
现在我有9000。Thx所有