Ingenico POS NFC UID编码错误

Ingenico POS NFC UID wrong encoding

我们的团队为 Ingenico 设备上的 NFC 卡开发 POS 解决方案。 我们用什么读卡:


/* Open the MIFARE driver  */
int  ClessMifare_OpenDriver (void);
Return value: OK

 /*Wait until a MIFARE contactless card is detected*/      
 int ClessMifare_DetectCardsEx (unsigned char nKindOfCard, unsigned int *pNumOfCards, unsigned int nTimeout);
 Return value: OK


/*Retrieve the type of the MIFARE card and its UID */
int ClessMifare_GetUid (unsigned char nCardIndex, unsigned char *pKindOfCard, unsigned char *pUidLength, unsigned char *pUid);

Return 值:

Paramater2:
 pKindOfCard(Type of cards)
 Card1:    CL_B_UNDEFINED
 Card2:    CL_B_UNDEFINED
 Card3:    CL_B_UNDEFINED
 Card4:    CL_MF_CLASSIC
 Paramater4:   pUid ( UID of the card)
 Card1:   "[=11=]4Br2780"  
 Card2:   "[=11=]434y2[=11=]20"
 Card3:   "[=11=]4s7B4?1"  
 Card4:   "60d1"

但在现实生活中我们期望:

Card1   044272c2d73880
Card2   0ec864c1
Card3   0473a742e43f81
Card4   04dbec79e20280

从 Android NFC 读卡器我们得到正确的数字,但从 POS 它与 Ingenico POS 的输出完全不同。我们需要做什么才能得到这个十六进制数字?

谢谢!

您实际上在这里看到了正确的 UID。只有一个您没有预料到的表示问题。 Return 您引用的值是 C 字符串,对不可打印字符进行八进制转义。 \nnn 是一个字节的八进制表示。

在值 "[=12=]4s7B4?1" 中,您有 [=13=]4,值为 0x04 的字节,后跟值为 0x73 的可打印字符 s,然后是 7,值0xa7 等

您可以使用 python 转换为十六进制进行调试,例如:

$ python2
>>> import binascii
>>> binascii.b2a_hex("[=10=]4Br2780")
'044272c2d73880'
>>> binascii.b2a_hex("[=10=]434y2[=10=]20")
'04dbec79e20280'
>>> binascii.b2a_hex("[=10=]4s7B4?1")
'0473a742e43f81'
>>> binascii.b2a_hex("60d1")
'0ec864c1'

但总的来说,数据在这里。