IC卡读卡器开发指南
摘要
IC卡读卡器开发指南
IC卡读卡器开发指南
1 概述
随着社会的发展和科技的进步,IC卡应用越来越广泛。会员卡,学生卡,社保卡,公交卡,金融卡等已得到大量的应用,可以说IC卡在我们身边无处不在。IC卡的普及一方面取决于各个组织的大力推广,另外也得力于无数程序员的辛苦工作,将IC卡读卡器和IC卡融合到各个系统中。本文将着重介绍IC卡读卡器在实际应用中编程的流程和步骤,使得IC卡的开发简单明了,更缩短我们的开发周期。
2 非接触IC卡介绍
非接触IC卡是IC卡中的一种,由于非接触IC卡没有物理磨损,寿命更长,价格更便宜,使得非接触IC卡的使用越来越多,最具有代表性的非接触IC卡就是M1卡及其兼容卡。下面将以M1卡为例,来介绍M1的内部结构。
M1卡有1k和4k之分,内部结构基本差不多,以M1卡1K为例:
该IC卡共有16个扇区,每个扇区4个块,每块16字节,所以总共有字节数16*4*16=1024个字节。
第15扇区 |
第63块 |
密钥块 |
第62块 |
数据块 | |
第61块 |
数据块 | |
第60块 |
数据块 | |
|
.
.
. |
|
第1扇区 |
第7块 |
密钥块 |
第6块 |
数据块 | |
第5块 |
数据块 | |
第4块 |
数据块 | |
第0扇区 |
第3块 |
密钥块 |
第2块 |
数据块 | |
第1块 |
数据块 | |
第0块 |
存卡号,只读 |
每个扇区最后一块用来保存密钥,故不能当作数据来使用。第0块由于是只读的,也不能用来存取数据,所以此卡实际可用的内存为(16*3-1)*16= 752字节。
在读写某个数据块之前,必须首先进行密钥认证,如果密钥认证失败,则不能读写,只有认证成功,方可进行读写等操作。每个扇区共用一组密钥,所以一个扇区只要认证成功一次,就可以读写此扇区中的四个数据块。
每个可用的数据块可以初始化为整形值或者原始数据。原始数据可以当作普通内存使用,整形值可以当作钱包等具有加减功能数字使用。
3 IC卡读卡器介绍
IC卡读卡器的种类繁多,这里以性价比较高的YW-605系列读卡器来作介绍。
YW-605系列读卡器具有多种接口,外观简洁,美观大方,可以读写市面上大部分非接触IC卡。
4 IC卡读卡器API函数介绍
YW-605系列读卡器提供二次开发功能,用户可以在我们的DLL的基础上调用相应的函数开发应用程序,我们提供Delphi,C++Builder,VB,VC等的调用例程和相关函数声明单元,或者按照读卡器的通信协议直接开发应用程序。
库函数,C++语言版,其它语言见相应的函数声明文件。
函数原形:int stdcall YW_GetDLLVersion(void);
参数列表:无
返 回 值:大于0为版本号,小于0为错误
2. DES加解密函数
函数原形:int stdcall DES(unsigned char cModel, unsigned char *pkey, unsigned char *in, unsigned char *out);
参数列表:
参数 |
类型 |
含义 |
cModel |
unsigned char |
加解密方向,0为加密,1为解密 |
pkey |
unsigned char* |
加解密秘钥,8个字节 |
in |
unsigned char* |
原始数据,8个字节 |
out |
unsigned char* |
加解密后的数据,8个字节 |
返 回 值:无意义
3. 3DES加解密函数
函数原形:int stdcall DES3(unsigned char cModel, unsigned char *pKey, unsigned char *In, unsigned char *Out);
参数列表:
参数 |
类型 |
含义 |
cModel |
unsigned char |
加解密方向,0为加密,1为解密 |
pkey |
unsigned char* |
加解密秘钥,16个字节 |
in |
unsigned char* |
原始数据,8个字节 |
out |
unsigned char* |
加解密后的数据,8个字节 |
返 回 值:无意义
函数原形:int stdcall DES3_CBC(unsigned char cModel, unsigned char *pKey,unsigned char *In, unsigned char *Out, unsigned char *pIV);
参数列表:
参数 |
类型 |
含义 |
cModel |
unsigned char |
加解密方向,0为加密,1为解密 |
pkey |
unsigned char* |
加解密秘钥,16个字节 |
in |
unsigned char* |
原始数据,8个字节 |
out |
unsigned char* |
加解密后的数据,8个字节 |
pIV |
unsigned char* |
加解密向量,8个字节 |
返 回 值:无意义
函数原形:int stdcall YW_ComInitial(int PortIndex, int Baud);
参数列表:
参数 |
类型 |
含义 |
PortIndex |
int |
串口号,1--255 |
Baud |
int |
通信波特率,2400—115200,默认为19200 |
返 回 值:1成功,0失败
函数原形:int stdcall YW_ComFree(void);
参数列表:无
返 回 值:1成功,0失败
7. USB无驱读写器,初始化USB
函数原形:int stdcall YW_USBHIDInitial(void);
参数列表:无
返 回 值:1成功,0失败
8. USB无驱读写器,释放USB
函数原形:int stdcall YW_USBHIDFree(void);
参数列表:无
返 回 值:1成功,0失败
函数原形:int stdcall YW_ComNewBound(int ReaderID ,int NewBound);
参数列表:
参数 |
类型 |
含义 |
ReaderID |
int |
所要获取的设备标示ID,范围0x0000-0xFFFF,如果未知,则ReaderID=0 |
NewBound |
int |
新的波特率
0x01->9600bps
0x02->14400bps
0x03->19200bps
0x04->28800bps
0x05->38400bps
0x06->57600bps
0x07->115200bps |
返 回 值:1成功,0失败
函数原形:int stdcall YW_SetReaderID(int OldID, int NewID);
参数列表:
参数 |
类型 |
含义 |
OldID |
int |
老的设备标示ID,范围0x0000-0xFFFF |
NewID |
int |
修改成新的设备标示ID,范围0x0000-0xFFFF |
返 回 值:1成功,0失败
函数原形:int stdcall YW_GetReaderID(int ReaderID);
参数列表:
参数 |
类型 |
含义 |
ReaderID |
int |
所要获取的设备标示ID,范围0x0000-0xFFFF,如果未知,则ReaderID=0 |
返 回 值:>=0成功,并且为所获取的设备标示,<0失败
函数原形:int stdcall YW_GetReaderVersion(int ReaderID);
参数列表:
参数 |
类型 |
含义 |
ReaderID |
int |
所要获取的设备标示ID,范围0x0000-0xFFFF,如果未知,则ReaderID=0 |
返 回 值:大于0为版本号,小于0为错误
函数原形:int stdcall YW_GetReaderSerial(int ReaderID, char *ReaderSerial);
参
相关联的产品







YW-605HA
USB免驱IC卡读卡器发卡器YW-605HA
USB免驱动IC卡读卡器,支持web,安卓和linux,型号YW-605HA
高频RFID读写器,WEB读卡器,安卓读卡器,Linux读卡器
