ic卡读写器:非接触式IC卡的读写程序怎么写?

        关IC卡没有任何关系,主要是读卡器的问题,看你的是串口,还是USB啊,如果是USB的应该就有相应的动态库,如果说是串口就按相关的协议进行串口读写即可.

         有windows32位动态库,不知道是干什么用,在哪里用的。发出来大家帮帮看看怎么用。
ic卡读写器参考:[http://www.aub.org.cn/] RF   系列非接触式   IC   卡6
2.2   库函数一览表
序号   函数   说明   备注
1   rf_init   ()   初始化串口
2   rf_exit   ()   关闭串口
3   rf_card   ()   寻卡
4   rf_authentication   ()   验证卡中某一扇区密码
5   rf_halt   ()   中止卡操作
6   rf_read   ()   读数据(字符)
7   rf_read_hex   ()   读数据(十六进制)
8   rf_write   ()   写数据(字符)
9   rf_write_hex   ()   写数据(十六进制)
10   rf_intival   ()   初始化块值
11   rf_increment   ()   加值
12   rf_decrement   ()   减值
13   rf_readval   ()   读值
14   rf_restore   ()   将块数据传到卡的内部寄存器

15   rf_transfer   ()   将寄存器的数据传到块中
16   rf_load_key   ()   向读写器下载授权密码
17   rf_load_key_hex   ()   向读写器下载授权密码(十六进
制)
C   语言库中未提供
此函数
18   rf_beep   ()   蜂鸣器鸣叫
19   rf_disp   ()   数码管显示数据
20   rf_request   ()   寻卡请求   FoxPro   For   Dos   库
中未提供此函数
21   rf_anticoll   ()   防止卡冲突   FoxPro   For   Dos   库
中未提供此函数
22   Rf_select   ()   选取一个给定序列号的卡   FoxPro   For   Dos   库
中未提供此函数
23   Rf_encrypt   ()   DES   加密算法
24   Rf_decrypt   ()   DES   解密算法
25   Rf_get_status   ()   读取读写器的版本号
26   Rf_reset   ()   射频头复位
27   Rf_initval   ()   高级初始化值
28   Rf_HL_decrement   ()   高级增值操作
29   Rf_HL_inctement   ()   高级减值操作
30   Rf_HL_write   ()   高级写
31   Rf_HL_read   ()   高级读
32   Rf_initval_ml   ()   ML   卡初始化值
33   Rf_decrement_ml   ()   ML   卡减值操作
34   Rf_readval_ml   ()   ML   卡读值操作


这个是具体的函数库:
2.3Windows   32   位动态库
(1)HANDLE   rf_init(__int16   port,long   baud);
功   能:初始化串口
参   数:__int16   port:通讯口号(0~3)
long   baud:通讯波特率(9600~115200)
返   回:成功则返回设备描述符(≥0)
例:HANDLE   icdev;
icdev=rf_init(1,115200);   /*初始化   com2   口以波特率   115200*/
(2)__int16   rf_exit(HANDLE   icdev);
功   能:关闭串口
参   数:HANDLE   icdev:rf_init()返回的设备描述符
返   回:成功返回   0
例:rf_exit(icdev);
(3)__int16   rf_card(HANDLE   icdev,unsigned   char   _Mode,unsigned   long   *_Snr);
功   能:寻卡,能返回在工作区域内某张卡的序列号
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Mode:寻卡模式
Mode=0:   IDLE   模式,一次操作一张卡
Mode=1:   ALL   模式,   一次操作多张卡
unsigned   long   *_Snr:   返回卡的序列号地址
返   回:成功则返回   0
例:__int16   st;
unsigned   long   snr;
st=rf_card(icdev,IDLE,&snr);
注:如果设为   IDLE   模式,则在对卡操作完成后,须执行   rf_halt()指令中止对卡的操作。
这样,只有该卡离开并重新进入操作区时,读写器才能对它再次操作。
(4)__int16   rf_authentication(HANDLE   icdev   ,unsigned   char   _Mode,
unsigned   char   _SecNr);
功   能:验证某一扇区密码
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Mode:验证密码的方式
取值如下:
0   —   用   KEYSET0   和   KEYA   验证
1   —   用   KEYSET1   和   KEYA   验证
2   —   用   KEYSET2   和   KEYA   验证
4   —   用   KEYSET0   和   KEYB   验证
5   —   用   KEYSET1   和   KEYB   验证
6   —   用   KEYSET2   和   KEYB   验证
unsigned   char   _SecNr:要验证密码的扇区号(0~15)
返   回:成功则返回   0
例:__int16   st;
RF   系列非接触式   IC   卡读写器使用手册
8
st=rf_authentication(icdev,0,0);
注:每张卡上有   A   密码和   B   密码,可根据实际需要确定是否使用   B   密码,这由卡的存取
控制位来决定。此外,读写器中可以存放三套密码,可用   rf_load_key()分别装
入,只有装入后才能使用验证密码函数验证。
(5)__int16   rf_halt(HANDLE   icdev);
功   能:中止卡操作
参   数:HANDLE   icdev:rf_init()返回的设备描述符
返   回:成功则返回   0
例:__int16   st;
st=rf_halt(icdev);
注:使用   rf_card()函数时,如果模式选择为   0   则在对卡进行读写操作完毕后,
必须执行   rf_halt(),且只能当该卡离开并再次进入操作区域时,读写器
才能够再次操作它。
(6)__int16   rf_read(HANDLE   icdev,usigned   char   _Adr,unsigned   char   *_Data);
功   能:读数据,一次必须读一个块
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Adr:块地址(0~63)
unsigned   char   *_Data:读出数据
返   回:成功则返回   0
例:__int16   st;
static   unsigned   char   data[16]
st=rf_read(icdev,0,data);
(7)__int16   rf_read_hex(HANDLE   icdev,usigned   char   _Adr,unsigned   char   *_Data);
功   能:以十六进制读数据,一次必须读一个块
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Adr:块地址(0~63)
unsigned   char   *_Data:读出数据
返   回:成功则返回   0
例:__int16   st;
static   unsigned   char   data[32]
st=rf_read_hex(icdev,0,data);   /*读出数据格式如   rf_write_hex*/
(8)__int16   rf_write(HANDLE   icdev,unsigned   char   _Adr,unsigned   char   *_Data);
功   能:写数据,   一次必须写一个块
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Adr:块地址(1~63)
unsigned   char   *_Data:写入数据,块长度为   16   B
返   回:成功则返回   0
例:__int16   st;
static   unsigned   char   data[16]
/*   给   data   赋值*/
st=rf_write(icdev,1,data);   /*写入块   1*/
RF   系列非接触式   IC   卡读写器使用手册
9
(9)__int16   rf_write_hex(HANDLE   icdev,unsigned   char   _Adr,unsigned   char   *_Data);
功   能:以十六进制写数据,   一次必须写一个块
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Adr:块地址(1~63)
unsigned   char   *_Data:写入数据,块长度为   32Byte
返   回:成功则返回   0
例:__int16   st;
unsigned   char   data[32]= "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ";
/*   data   赋值为   16   个   0xaa*/
st=rf_write_hex(icdev,1,data);   /*写入块   1*/
(10)__int16   rf_initval(HANDLE   icdev,unsigned   char   _Adr,unsigned   long   _Value);
功   能:初始化块值
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Adr:块地址(1~63)
unsigned   long   _Value:初始值
返   回:成功则返回   0
例:__int16   st;
unsigned   long   value;
value=1000;
st=rf_initval(icdev,1,value);   /*将块   1   的值初始化为   value*/
注:作为数值处理的块,是以特殊格式存贮的,所以必须用初始化值函数初始化,
初始化之后方可进行读、减、加的处理。
(11)__int16   rf_increment(HANDLE   icdev,unsigned   char   _Adr,unsigned   long   _Value);
功   能:块增值操作
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Adr:块地址(1~63)
unsigned   long   _Value:要增加的值
返   回:成功则返回   0;
例:__int16   st;
unsigned   long   value;
value=1;
st=rf_increment(icdev,1,value);   /*将块   1   的值增加   value*/
(12)__int16   rf_decrment(HANDLE   icdev,unsigned   char   _Adr,unsigned   long   _Value);
功   能:块减值操作
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Adr:块地址(1~63)
unsigned   long   _Value:要减少的值
返   回:成功则返回   0
例:__int16   st;
unsigned   long   value;
value=1;
st=rf_decrement(icdev,1,value);   /*将块   1   的值减少   value*/
RF   系列非接触式   IC   卡读写器使用手册
10
(13)__int16   rf_readval(HANDLE   icdev,unsigned   char   _Adr,unsigned   long   *_Value);
功   能:读值
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Adr:块地址(0~63)
unsigned   long   *_Value:返回读出值的地址
返   回:成功返回   0
例:__int16   st;
unsigned   long   value;
st=rf_readval(icdev,1,&value);   /*读出块   1   的值,放入   value*/
(14)__int16   rf_restore(HANDLE   icdev,unsigned   char   _Adr);
功   能:将某块的数据传入卡的内部寄存器中
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Adr:要进行回传的地址
返   回:成功返回   0
例:__int16   st;
st=rf_restore(icdev,1);
注:用此函数将某一块内的数值传入卡的内部寄存器,然后用   rf_transfer()函数
将寄存器的数据再传送到另一块中去,即实现了块与块之间的数值传送。
(15)__int16   rf_transfer(HANDLE   icdev,unsigned   char   _Adr);
功   能:将寄存器的数据传送到某一块中
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Adr:要传送的地址(0~63)
返   回:成功返回   0
例:__int16   st;
st=rf_transfer(icdev,1);
注:见   rf_restore()的说明。
(16)__int16   rf_load_key(HANDLE   icdev,unsigned   char   _Mode,unsigned   char   SecNr,
unsigned   char   *   _Nkey);
功   能:向读写器的   RAM   装入密码
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Mode   :同   rf_authentication()
unsigned   char   _SecNr:同   rf_authentication()
unsigned   char   *_Nkey:包含了要写入硬件系统   RAM   中的卡密码
返   回:成功则返回   0
例://key   A   and   key   B
unsigned   char   tk[2][7]=   {   {0xa0,0xa1,0xa2,0xa3,0xa4,0xa5},
{0xb0,0xb1,0xb2,0xb3,0xb4,0xb5}   };
/*装入   1   扇区的   A   密码   0   套,*/
if((rf_load_key(icdev,0,   1,tk[1]))!=0)
{
printf( "Load   key   error! ");
rf_exit();
exit(1);
RF   系列非接触式   IC   卡读写器使用手册
11
}
注:*_Nkey   是与卡中的密码相对应的密码。



(17)__int16   rf_load_key_hex(HANDLE   icdev,unsigned   char   _Mode,
unsigned   char   SecNr,char   *   _Nkey);
功   能:向读写器的   RAM   装入   16   进制密码
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Mode   :同   rf_authentication()
unsigned   char   _SecNr:同   rf_authentication()
unsigned   char   *_Nkey:要写入读写器   RAM   中的卡密码
返   回:成功则返回   0
例://key   A
unsigned   char   tk[]=   "a0a1a2a3a4a5 "/*等同于{0xa0_.0xa5}*/
/*装入   1   扇区的   A   密码|0   套,*/
if((rf_load_key_Hex(icdev,0,   1,tk))!=0)
{
printf( "Load   key   error! ");
rf_exit();
exit(1);
}
注:*_Nkey   是与卡中的密码相对应的密码。
(18)_int16   rf_get_status(unsigned   char   *_Status);
功   能:取得读写器的版本号
参   数:unsigned   char   *_Status:返回读写器版本信息
返   回:成功则返回   0
例:int   st;
unsigned   char   status[32];
st=rf_get_status(status);
(19)   __int16   rf_request(int   icdev,unsigned   char   _Mode,   unsigned   int   *TagType);
功   能:寻卡请求
参   数:   HANDLE   icdev:设备描述符
unsigned   char   _Mode:寻卡模式,为   0   或   1
Mode=0:IDLE   模式,一次只选一张卡
Mode=1:ALL   模式,   一次可选多张卡
unsigned   int   *Tagtype:指向返回的卡类型值
返   回:成功则返回   0
例:int   st;
st=rf_request(icdev,IDLE,tagtype);
注:对卡操作前先执行寻卡指令
(20)__int16   rf_anticoll(int   icdev,unsigned   char   _Bcnt,unsigned   long   *_Snr);
功   能:防止卡冲突;返回卡的序列号
参   数:HANDLE   icdev:   设备描述符
unsigned   char   _Bcnt:   预选卡所用的位数,标准值为   0(不考虑系列号)
RF   系列非接触式   IC   卡读写器使用手册
12
unsigned   long   *_Snr:   返回的卡序列号地址
返   回:成功则返回   0
例:int   st;
st=rf_anticoll(0,snr);
注:request   指令之后应立即调用   anticoll,除非卡的序列号已知。
(21)__int16   rf_select(int   icdev,unsigned   long   _Snr,unsigned   char   *_Size);
功   能:从多个卡中选取一个给定序列号的卡
参   数:HANDLE   icdev:设备描述符
unsigned   long   _Snr:卡序列号
unsigned   char   *_Size:指向返回的卡容量的数据
返   回:成功则返回   0
例:   int   st;
snr=239474;
st=rf_select(snr,size);   /*   返回   239474   卡的容量   */
注:上述   rf_card()寻卡函数包含了   19~21   三个低级函数。每次对卡重新操作时首先要调用
rf_card()函数(或连续调用   19~21   三个函数)。
(22)__int16   rf_encrypt(char   *key,char   *ptrsource,unsigned   __int16   msglen,
char   *ptrdest);
功   能:DES   算法加密
参   数:char   *key:加密的密码,长度为   8
char   *ptrsource:原文
unsigned   __int16   msglen:原文长度
char   *ptrdest:密文
返   回:成功则返回   0
例:/*   将长度为   16   的”abcdefghabcdefgh”用密码“12345678”加密   */
rf_encrypt(“12345678”,”abcdefghabcdefgh”,16,ptrdest)
(23)__int16   rf_decrypt(char   *key,char   *ptrsource,unsigned   __int16   msglen,
char   *ptrdest);
功   能:DES   算法解密函数
参   数:char   *key:加密的密码,长度为   8
char   *ptrsource:加密后密文
unsigned   __int16   msglen:原文长度
char   *ptrdest:原文
返   回:成功则返回   0
例:略,使用过程与   rf_encrypt   相反。
(24)__int   rf_beep(unsigned   int   _Msec);
功   能:蜂鸣
参   数:unsigned   int   _Msec:蜂鸣时间的长短,单位是   10   毫秒;
返   回:成功则返回   0
例:int   st;
st=rf_beep(10);   /*鸣叫   100   毫秒*/
RF   系列非接触式   IC   卡读写器使用手册
13
(25)__int   rf_disp(HANDLE   icdev,unsigned   char   pt_mode,unsigned   int   digit);
功   能:使读写器的数码管显示数字
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   pt_mode:   小数点显示模式
取值如下:
0   —   小数点熄灭
1   —   个位后的小数点位亮
2   —   十位后的小数点位亮
3   —   百位后的小数点位亮
4   —   千位后的小数点位亮
unsigned   int   digit:要显示的数
返   回:成功则返回   0
例:int   st;
st=rf_disp(icdev,0,1234);   /*显示整数   1234*/
(26)__int16   rf_reset(HANDLE   icdev,unsigned   __int16   _Msec);
功   能:射频头复位
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   __int16   _Msec:复位时间,0~500   毫秒有效
返   回:成功则返回   0
例:st=rf_reset(icdev,60);
(27)__int16   rf_HL_initval(HANDLE   icdev,unsigned   char   _Mode,unsigned   char   _SecNr,
unsigned   long   _Value,unsigned   char   *_Snr);
功   能:高级初始化值
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Mode:寻卡模式,为   0、1   或   2
Mode=0:   IDLE   模式,一次只操作一张卡
1:ALL   模式,一次可操作多张卡
2:只对给定序列号的卡操作
unsigned   char   _SecNr:扇区号(0~15)
unsigned   long   _Value:初始值
unsigned   char   *_Snr:卡的序列号地址
返   回:成功则返回   0
例:st=rf_HL_initval(icdev,0,3,100L,&Snr);
注:高级函数为几个低级函数的组合,对卡操作之前不必使用   rf_card()和
rf_authentication()函数。
(28)__int16   rf_HL_decrement(HANDLE   icdev,unsigned   char   _Mode,
unsigned   char   _SecNr,unsigned   long   _Value,
unsigned   long   _Snr,unsigned   long   *_NValue,
unsigned   long   *_NSnr);
功   能:高级减值函数
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Mode:寻卡模式,同   HR_initval();
unsigned   char   _SecNr:扇区号(0~15)
RF   系列非接触式   IC   卡读写器使用手册
14
unsigned   long   _Value:要减的值
unsigned   long   _Snr:卡的序列号
unsigned   long   *_NValue:减后的值的地址
unsigned   long   *_NSnr:返回卡的序列号地址
返   回:成功则返回   0
例:st=rf_HL_decrement(icdev,0,2,1,Snr,&Nvalue,&NSnr);
(29)__int16   rf_HL_increment(HANDLE   icdev,unsigned   char   _Mode,
unsigned   char   _SecNr,unsigned   long   _Value,
unsigned   long   _Snr,unsigned   long   *_NValue,
unsigned   long   *_NSnr);
功   能:高级增值函数
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Mode:寻卡模式,同   HL_initval();
unsigned   char   _SecNr:扇区号(0~15)
unsigned   long   _Value:要加的值
unsigned   long   _Snr:卡的序列号
unsigned   long   *_NValue:加后的值的地址
unsigned   long   *_NSnr:返回卡的序列号地址
返   回:成功则返回   0
例:st=rf_HL_increment(icdev,0,2,1,Snr,&Nvalue,&NSnr);
(30)__int16   rf_HL_write(HANDLE   icdev,unsigned   char   _Mode,unsigned   char   _Adr,
unsigned   long   *_Snr,unsigned   char   *_Data);
功   能:高级写数据
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Mode:寻卡模式,为   0、1   或   2
Mode=0:   IDLE   模式,一次只操作一张卡
1:ALL   模式,一次可操作多张卡
2:只对给定序列号的卡操作
unsigned   char   _Adr:块地址(1~63)
unsigned   long   *_Snr:卡的序列号地址
unsigned   char   *_Data:写入的数据
返   回:成功则返回   0
例:st=rf_HL_write(icdev,0,3,&Snr,data);
(31)__int16   rf_HL_read(HANDLE   icdev,unsigned   char   _Mode,unsigned   char   _Adr,
unsigned   long   _Snr,unsigned   char   *_Data,
unsigned   long   *_NSnr);
功   能:高级读数据
参   数:HANDLE   icdev:rf_init()返回的设备描述符
unsigned   char   _Mode:同   HL_write();
unsigned   char   _Adr:块地址(0~63)
unsigned   long   _Snr:卡的序列号
unsigned   char   *_Data:读出的数据
unsigned   long   *_NSnr:返回卡的序列号地址
成功则返回0
列如st=rf_HL_read(icdev,0,3,Snr,data,&NSnr);

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值