IC卡讀卡器開(kāi)發(fā)指南
摘要
IC卡讀卡器開(kāi)發(fā)指南
IC卡讀卡器開(kāi)發(fā)指南
1?????? 概述
隨著社會(huì)的發(fā)展和科技的進(jìn)步,IC卡應(yīng)用越來(lái)越廣泛。會(huì)員卡,學(xué)生卡,社??ǎ豢?,金融卡等已得到大量的應(yīng)用,可以說(shuō)IC卡在我們身邊無(wú)處不在。IC卡的普及一方面取決于各個(gè)組織的大力推廣,另外也得力于無(wú)數(shù)程序員的辛苦工作,將IC卡讀卡器和IC卡融合到各個(gè)系統(tǒng)中。本文將著重介紹IC卡讀卡器在實(shí)際應(yīng)用中編程的流程和步驟,使得IC卡的開(kāi)發(fā)簡(jiǎn)單明了,更縮短我們的開(kāi)發(fā)周期。
2?????? 非接觸IC卡介紹
非接觸IC卡是IC卡中的一種,由于非接觸IC卡沒(méi)有物理磨損,壽命更長(zhǎng),價(jià)格更便宜,使得非接觸IC卡的使用越來(lái)越多,最具有代表性的非接觸IC卡就是M1卡及其兼容卡。下面將以M1卡為例,來(lái)介紹M1的內(nèi)部結(jié)構(gòu)。
M1卡有1k和4k之分,內(nèi)部結(jié)構(gòu)基本差不多,以M1卡1K為例:
該IC卡共有16個(gè)扇區(qū),每個(gè)扇區(qū)4個(gè)塊,每塊16字節(jié),所以總共有字節(jié)數(shù)16*4*16=1024個(gè)字節(jié)。
?
|
第15扇區(qū) |
第63塊 |
密鑰塊 |
|
第62塊 |
數(shù)據(jù)塊 | |
|
第61塊 |
數(shù)據(jù)塊 | |
|
第60塊 |
數(shù)據(jù)塊 | |
|
? |
.
.
. |
? |
|
第1扇區(qū) |
第7塊 |
密鑰塊 |
|
第6塊 |
數(shù)據(jù)塊 | |
|
第5塊 |
數(shù)據(jù)塊 | |
|
第4塊 |
數(shù)據(jù)塊 | |
|
第0扇區(qū) |
第3塊 |
密鑰塊 |
|
第2塊 |
數(shù)據(jù)塊 | |
|
第1塊 |
數(shù)據(jù)塊 | |
|
第0塊 |
存卡號(hào),只讀 |
?
每個(gè)扇區(qū)最后一塊用來(lái)保存密鑰,故不能當(dāng)作數(shù)據(jù)來(lái)使用。第0塊由于是只讀的,也不能用來(lái)存取數(shù)據(jù),所以此卡實(shí)際可用的內(nèi)存為(16*3-1)*16= 752字節(jié)。
?
在讀寫(xiě)某個(gè)數(shù)據(jù)塊之前,必須首先進(jìn)行密鑰認(rèn)證,如果密鑰認(rèn)證失敗,則不能讀寫(xiě),只有認(rèn)證成功,方可進(jìn)行讀寫(xiě)等操作。每個(gè)扇區(qū)共用一組密鑰,所以一個(gè)扇區(qū)只要認(rèn)證成功一次,就可以讀寫(xiě)此扇區(qū)中的四個(gè)數(shù)據(jù)塊。
?
每個(gè)可用的數(shù)據(jù)塊可以初始化為整形值或者原始數(shù)據(jù)。原始數(shù)據(jù)可以當(dāng)作普通內(nèi)存使用,整形值可以當(dāng)作錢(qián)包等具有加減功能數(shù)字使用。
?
3?????? IC卡讀卡器介紹
IC卡讀卡器的種類(lèi)繁多,這里以性?xún)r(jià)比較高的YW-605系列讀卡器來(lái)作介紹。
YW-605系列讀卡器具有多種接口,外觀簡(jiǎn)潔,美觀大方,可以讀寫(xiě)市面上大部分非接觸IC卡。
4?????? IC卡讀卡器API函數(shù)介紹
YW-605系列讀卡器提供二次開(kāi)發(fā)功能,用戶(hù)可以在我們的DLL的基礎(chǔ)上調(diào)用相應(yīng)的函數(shù)開(kāi)發(fā)應(yīng)用程序,我們提供Delphi,C++Builder,VB,VC等的調(diào)用例程和相關(guān)函數(shù)聲明單元,或者按照讀卡器的通信協(xié)議直接開(kāi)發(fā)應(yīng)用程序。
庫(kù)函數(shù),C++語(yǔ)言版,其它語(yǔ)言見(jiàn)相應(yīng)的函數(shù)聲明文件。
?
函數(shù)原形:int stdcall YW_GetDLLVersion(void);
參數(shù)列表:無(wú)
返 回 值:大于0為版本號(hào),小于0為錯(cuò)誤
?
2.???? DES加解密函數(shù)
函數(shù)原形:int stdcall DES(unsigned char cModel, unsigned char *pkey, unsigned char *in, unsigned char *out);
參數(shù)列表:
|
參數(shù) |
類(lèi)型 |
含義 |
|
cModel |
unsigned char |
加解密方向,0為加密,1為解密 |
|
pkey |
unsigned char* |
加解密秘鑰,8個(gè)字節(jié) |
|
in |
unsigned char* |
原始數(shù)據(jù),8個(gè)字節(jié) |
|
out |
unsigned char* |
加解密后的數(shù)據(jù),8個(gè)字節(jié) |
?
返 回 值:無(wú)意義
?
3.???? 3DES加解密函數(shù)
函數(shù)原形:int stdcall DES3(unsigned char cModel, unsigned char *pKey, unsigned char *In, unsigned char *Out);
參數(shù)列表:
|
參數(shù) |
類(lèi)型 |
含義 |
|
cModel |
unsigned char |
加解密方向,0為加密,1為解密 |
|
pkey |
unsigned char* |
加解密秘鑰,16個(gè)字節(jié) |
|
in |
unsigned char* |
原始數(shù)據(jù),8個(gè)字節(jié) |
|
out |
unsigned char* |
加解密后的數(shù)據(jù),8個(gè)字節(jié) |
?
返 回 值:無(wú)意義
?
函數(shù)原形:int stdcall DES3_CBC(unsigned char cModel,? unsigned char *pKey,unsigned char *In, unsigned char *Out, unsigned char *pIV);
參數(shù)列表:
|
參數(shù) |
類(lèi)型 |
含義 |
|
cModel |
unsigned char |
加解密方向,0為加密,1為解密 |
|
pkey |
unsigned char* |
加解密秘鑰,16個(gè)字節(jié) |
|
in |
unsigned char* |
原始數(shù)據(jù),8個(gè)字節(jié) |
|
out |
unsigned char* |
加解密后的數(shù)據(jù),8個(gè)字節(jié) |
|
pIV |
unsigned char* |
加解密向量,8個(gè)字節(jié) |
返 回 值:無(wú)意義
?
函數(shù)原形:int stdcall YW_ComInitial(int PortIndex, int Baud);
參數(shù)列表:
|
參數(shù) |
類(lèi)型 |
含義 |
|
PortIndex |
int |
串口號(hào),1--255 |
|
Baud |
int |
通信波特率,2400—115200,默認(rèn)為19200 |
返 回 值:1成功,0失敗
?
?
函數(shù)原形:int stdcall YW_ComFree(void);
參數(shù)列表:無(wú)
返 回 值:1成功,0失敗
?
7.???? USB無(wú)驅(qū)讀寫(xiě)器,初始化USB
函數(shù)原形:int stdcall YW_USBHIDInitial(void);
參數(shù)列表:無(wú)
返 回 值:1成功,0失敗
?
8.???? USB無(wú)驅(qū)讀寫(xiě)器,釋放USB
函數(shù)原形:int stdcall YW_USBHIDFree(void);
參數(shù)列表:無(wú)
返 回 值:1成功,0失敗
?
函數(shù)原形:int stdcall YW_ComNewBound(int ReaderID ,int NewBound);
參數(shù)列表:
|
參數(shù) |
類(lèi)型 |
含義 |
|
ReaderID |
int |
所要獲取的設(shè)備標(biāo)示ID,范圍0x0000-0xFFFF,如果未知,則ReaderID=0 |
|
NewBound |
int |
新的波特率
0x01->9600bps
0x02->14400bps
0x03->19200bps
0x04->28800bps
0x05->38400bps
0x06->57600bps
0x07->115200bps |
返 回 值:1成功,0失敗
?
?
函數(shù)原形:int stdcall YW_SetReaderID(int OldID, int NewID);
參數(shù)列表:
|
參數(shù) |
類(lèi)型 |
含義 |
|
OldID |
int |
老的設(shè)備標(biāo)示ID,范圍0x0000-0xFFFF |
|
NewID |
int |
修改成新的設(shè)備標(biāo)示ID,范圍0x0000-0xFFFF |
返 回 值:1成功,0失敗
?
函數(shù)原形:int stdcall YW_GetReaderID(int ReaderID);
參數(shù)列表:
|
參數(shù) |
類(lèi)型 |
含義 |
|
ReaderID |
int |
所要獲取的設(shè)備標(biāo)示ID,范圍0x0000-0xFFFF,如果未知,則ReaderID=0 |
返 回 值:>=0成功,并且為所獲取的設(shè)備標(biāo)示,<0失敗
?
函數(shù)原形:int stdcall YW_GetReaderVersion(int ReaderID);
參數(shù)列表:
|
參數(shù) |
類(lèi)型 |
含義 |
|
ReaderID |
int |
所要獲取的設(shè)備標(biāo)示ID,范圍0x0000-0xFFFF,如果未知,則ReaderID=0 |
返 回 值:大于0為版本號(hào),小于0為錯(cuò)誤
?
函數(shù)原形:int stdcall YW_GetReaderSerial(int ReaderID, char *ReaderSerial);
參
相關(guān)聯(lián)的產(chǎn)品
YW-605RA
串口射頻卡RFID讀寫(xiě)器
USB免驅(qū)動(dòng)IC卡讀卡器,支持Windows,安卓和linux,型號(hào)YW-605RA
高頻RFID讀寫(xiě)器,Linux讀卡器
SDT-HA
USB免驅(qū)IC卡讀卡器發(fā)卡器SDT-HA
價(jià)格低的射頻卡讀寫(xiě)器,IC卡讀卡器SDT-HA
高頻RFID讀寫(xiě)器,WEB讀卡器,安卓讀卡器,Linux讀卡器
YW-605HA
USB免驅(qū)IC卡讀卡器發(fā)卡器YW-605HA
USB免驅(qū)動(dòng)IC卡讀卡器,支持web,安卓和linux,型號(hào)YW-605HA
高頻RFID讀寫(xiě)器,WEB讀卡器,安卓讀卡器,Linux讀卡器
YW-607HC
NFC讀寫(xiě)器YW-607HC
支持web瀏覽器,windows,安卓,linux的NFC讀寫(xiě)器YW-607HC
高頻RFID讀寫(xiě)器,WEB讀卡器,安卓讀卡器,Linux讀卡器

