社区
Windows SDK/API
帖子详情
非接触式IC卡的读写程序怎么写?请大家多多帮帮忙!
zuiyu22
2007-03-27 03:25:11
求教原代码!谢谢!
...全文
1391
12
打赏
收藏
非接触式IC卡的读写程序怎么写?请大家多多帮帮忙!
求教原代码!谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
没做过,帮顶
于兆杰博士分享IC行业学习的思路
本视频是芯路线于兆杰博士录制,主要帮大家分析到底要不要学IC,以及分享一些IC职业信息以及知识点透视、笔试考核要点整理等。
(7)mifare卡
读
写
器开发心得『转』--整理重发贴
发信人:srz 发表时间:2003-04-15 14:03:04 -------------------------------------------------------------------------------- 一张卡用读卡器读数据为 b00:620C66F7FF88040046D4EE0532363A31 B01:00000000000000000000000000000
第十七章、
程序
管理与 SELinux 初探
一个
程序
被加载到内存当中运行,那么在内存内的那个数据就被称为
程序
(process)。
程序
是操作系统上
非
常重要的概念, 所有系统上面跑的数据都会以
程序
的型态存在。那么系统的
程序
有哪些状态?不同的状态会如何影响系统的运行?
程序
之间是否可以互相控管等等的,这些都是我们所必须要知道的项目。 另外与
程序
有关的还有 SELinux 这个加强文件存取安全性的咚咚,也必须要做个了解呢!
鸟哥的Linux私房菜(基础篇)- 第十七章、
程序
管理与 SELinux 初探
第十七章、
程序
管理与 SELinux 初探 最近升级日期:2009/09/11 一个
程序
被加载到内存当中运行,那么在内存内的那个数据就被称为
程序
(process)。
程序
是操作系统上
非
常重要的概念,所有系统上面跑的数据都会以
程序
的型态存在。那么系统的
程序
有哪些状态?不同的状态会如何影响系统的运行?
程序
之间是否可以互相控管等等的,这些都是我们所必须要知道的项目。另外与
程序
软件测试|神操作!用 Python 操作 xmind 绘制思
给我过了,面试官人还挺好的。二本学院,就相当于古代犯人脸上的那个刺青,大家看见了都躲得远远的,海投了300+,0offer,现在每天除了焦虑什么也不想做八股也懒得看也不想进厂打螺丝 ,睡。我一直认为,本山大叔的昨天今天明天这个小品是春晚永远的经典,看完2023年春晚后(不对,我根本没看完,因为2023年春晚催眠效果太强),我更加坚定了我的想法。
Windows SDK/API
1,183
社区成员
22,335
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章