2016-11-17 93 views
0

我们的团队在Ingenico设备上为NFC卡开发POS解决方案。 我们用什么来读取卡:Ingenico POS NFC UID错误编码


/* 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阅读器我们得到正确的数字,但从POS它相当不同于Ingenico POS的输出。我们需要做什么才能在十六进制中得到这个数字?

谢谢!

回答

2

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

在值"\004s\247B\344?\201",你有\004,值0×04字节,然后打印的字符s,值0x73,其次是\247,值0xa7等

可以转换为十六进制与蟒蛇调试例如:

$ 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' 

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

+0

它的工作!谢谢! –