Ingenico POS NFC UID编码错误

时间:2016-11-17 08:44:08

标签: nfc smartcard reader

我们的团队为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);

返回值:

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:   "\004Br\302\3278\200"  
 Card2:   "\004\333\354y\342\002\200"
 Card3:   "\004s\247B\344?\201"  
 Card4:   "\016\310d\301"

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:3)

您实际上是在这里看到正确的UID。只有一个你不期望的代表问题。您引用的返回值是C字符串,八进制转义为不可打印的字符。 \nnn是一个字节的八进制表示。

在值"\004s\247B\344?\201"中,您有\004,值为0x04的字节,后跟可打印字符s,值为0x73,后跟\247,值为0xa7,等

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

$ python2
>>> import binascii
>>> binascii.b2a_hex("\004Br\302\3278\200")
'044272c2d73880'
>>> binascii.b2a_hex("\004\333\354y\342\002\200")
'04dbec79e20280'
>>> binascii.b2a_hex("\004s\247B\344?\201")
'0473a742e43f81'
>>> binascii.b2a_hex("\016\310d\301")
'0ec864c1'

但总体而言,数据就在这里。