2016-11-17 92 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

它的工作!謝謝! –