非接触式IC卡的读写程序怎么写?请大家多多帮帮忙!

zuiyu22 2007-03-27 03:25:11
求教原代码!谢谢!
...全文
1391 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
budongdehaizi 2012-05-17
  • 打赏
  • 举报
回复
楼主你好
你有IC卡的编程源码不
发我邮箱下605646882@qq.com
真心感谢
wunalin 2011-05-12
  • 打赏
  • 举报
回复
哪里有关于ic卡的编程原码?最好是pb的
leafly2005 2010-12-01
  • 打赏
  • 举报
回复
LZ,我也想要这样一个源程序啊,不知道LZ有没有??leafly2005@126.com
Coder-Java 2010-06-24
  • 打赏
  • 举报
回复
LZ 现在又这个方面的源程序没有 实现简单的功能即可 做实验用 谢谢
hanbiao1987@126.com
天行健2005 2009-12-11
  • 打赏
  • 举报
回复
关注下
jiashijie 2008-06-13
  • 打赏
  • 举报
回复
关注,帮顶
zuiyu22 2007-03-28
  • 打赏
  • 举报
回复
(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);
zuiyu22 2007-03-28
  • 打赏
  • 举报
回复
这个是具体的函数库:
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 是与卡中的密码相对应的密码。


zuiyu22 2007-03-28
  • 打赏
  • 举报
回复
有windows32位动态库,不知道是干什么用,在哪里用的。发出来大家帮帮看看怎么用。
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 卡读值操作
oushengfen 2007-03-27
  • 打赏
  • 举报
回复
关IC卡没有任何关系,主要是读卡器的问题,看你的是串口,还是USB啊,如果是USB的应该就有相应的动态库,如果说是串口就按相关的协议进行串口读写即可.
xiaocai800322 2007-03-27
  • 打赏
  • 举报
回复
关注
wuhuawu09 2007-03-27
  • 打赏
  • 举报
回复
没做过,帮顶

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧