使用java验证pin返回6a86



我有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所有

最新更新