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'
但总的来说,数据在这里。
我们的团队为 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'
但总的来说,数据在这里。