-
用VF调用DLL对IC卡进行读写充分值等应用
2006-02-23 09:05:59软件编写初衷是教你如何调用DLL动态库以及实现对DAS等系列产品的硬件调用与应用。...说明:此操作为目前深圳达实/润达二家公司的考勤机消费机通用的调用DLL ,IC卡读写机具兼容明华等多家的IC卡读写器. -
unity 如何连接刷卡器(读取IC卡数据)
2018-03-12 08:25:42我买的是RFID刷卡器,商家给了一套开发包,里面有C#的源码,是vs...开发包自带的dll动态库是用C写的,而且是32位的,我反编译打包成64位的拖到unity里还是没法调用。哪位大神做过这方面的程序,最好有unity程序代码。 -
TYPE B非接触式IC卡防冲突原理的研究与实现
2020-11-10 01:47:41非接触IC卡又称射频卡,是近几年发展起来的一项新技术,同时也是射频识别技术和IC卡技术有机结合的产物。非接触IC卡与条码卡、磁卡、接触式IC卡比较,具有高安全性、高可靠性、使用方便快捷等特点。卡与读写器在相对... -
基于RT-Thread系统的RC-522 IC读卡系统
2020-01-10 20:49:41欢迎使用Markdown编辑器 ...我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体...基于RT-Thread系统的RC-522 IC读卡系统
RT-Thread是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,这里使用的芯片为STM32F103ZE,在RT-Thread系统中创建一个读卡的线程,完整的代发会放在文章末尾,写的比较潦草,参考了购买RC-522时赠送的代码。
硬件使用的是 MFRC-522 RC522 RFID射频 IC卡感应模块
硬件接线图
最后我们来编写代码
首先创建一个静态的读卡线程
/* init thread_card 读卡线程*/ result = rt_thread_init(&card_thread, //线程 "card", //线程1的名称 card_thread_entry, //入口 RT_NULL, //参数是 (rt_uint8_t*)&card_stack[0], //线程栈地址 sizeof(card_stack), //线程栈大小 10, //线程优先级 5); //线程时间片 if (result == RT_EOK) { rt_thread_startup(&card_thread); }
然后编辑线程函数
这里使用的读卡的通信方式是SPI/**************************************************** * 读卡线程 * 优先级:10 ***************************************************/ static void card_thread_entry(void* parameter) { RC522_Init (); //初始化 rt_kprintf ( "WF-RC522 Test\n" ); PcdReset (); //复位RCC /*设置工作方式*/ M500PcdConfigISOType ( 'A' ); while (1) { IC_test (); } }
然后读卡,打印出读出来的卡号
/*************************************************************** ** 函数名称: IC_test ** 功能描述: 读卡函数 ***************************************************************/ void IC_test ( void ) { u8 ucArray_ID [ 4 ]; /*先后存放IC卡的类型和UID(IC卡序列号)*/ u8 ucStatusReturn; /*返回状态*/ ucStatusReturn = PcdRequest ( PICC_REQALL, ucArray_ID ); //printf("find IC card\n"); if ( ucStatusReturn == MI_OK ) { /*防冲撞(当有多张卡进入读写器操作范围时,防冲突机制会从其中选择一张进行操作)*/ if ( PcdAnticoll ( ucArray_ID ) == MI_OK ) { rt_kprintf ( "The Card ID is: %02X%02X%02X%02X\n", ucArray_ID [ 0 ], ucArray_ID [ 1 ], ucArray_ID [ 2 ], ucArray_ID [ 3 ] ); } } }
欢迎大家共同探讨,能力有限,不规范的地方请指正。
完整代码 -
德卡D3读卡器C#开发中的填坑记录
2020-11-29 14:33:45公司近期项目有IC卡的读写需求,买的是深圳德卡的D3U,开发语言用的是C#。帮助文档上写的动态类库函数与asp demo上有很大的区别,如果你也是用C#开发(Java demo正常),这篇笔记可能对你有所帮助。 坑1:USB端口...记录德卡D3读卡器的一些小坑。公司近期项目有IC卡的读写需求,买的是深圳德卡的D3U,开发语言用的是C#。帮助文档上写的动态类库函数与asp demo上有很大的区别,如果你也是用C#开发(Java demo正常),这篇笔记可能对你有所帮助。
- 坑1:USB端口在插入电脑后没有显示出来,默认使用端口100!
- 坑2:函数说明是包含输入数据参数,但实际demo对应的函数是没有的,那么数据是如何传参的呢?你没看错,是工具类里面的字段,也就是说每一次写数据之前都要把数据传给那个字段,然后再调用对应的写操作函数。
- IC S50卡的扇区和块结构可以参考:https://blog.csdn.net/T5201314T/article/details/109923805
记录工作中的小意外,如果你也有同样的问题,可以相互探讨哦!
-
editplus 代码编辑器html c++ jsp css
2009-08-08 13:00:27对( ) 这样的特殊符号,应该用\( \)来表示,这也是很标准的regexp语法,可以写为 \n 【5】正则表达式应用——删除空行 启动EditPlus,打开待处理的文本类型文件。 ①、选择“查找”菜单的“替换”命令,弹出文本替换... -
B/S架构下applet,JNI实现对客户端硬件的读取
2012-03-27 18:09:15项目要求连接读卡器读写IC卡。由于项目是用PHP开发,所以刚开始设计的是用PHP连接读卡器(几个人还都没察觉有什么问题,汗)。 顺便说一下PHP如何读取硬件. 第一种:开发PHP标准的extension,此种方法开发难度较...声明:本文只是提供了大体的思路,文中所涉及到的代码,不保证都能无错误运行
前言
项目要求连接读卡器读写IC卡。由于项目是用PHP开发,所以刚开始设计的是用PHP连接读卡器(几个人还都没察觉有什么问题,汗)。
顺便说一下PHP如何读取硬件.
第一种:开发PHP标准的extension,此种方法开发难度较高,但是后期维护很容易。
第二种:写个COM组件注册到系统里,然后PHP调用COM组件。此种方法实现比较容易,但是维护较复杂,需要用regsvr32注册COM组件。
最后讨论决定用第二种比较简单的方法(到这里还是没察觉任何问题。汗)
路子选好了,说干就干,热火朝天的忙了两天,用VB写了个COM组件,然后注册到系统里.很显然功能实现了(欣喜若狂,但是还未察觉任何不妥).于是打包交给组长,组长试了试,也没什么问题。都以为就这么完事了。孰料第二天,组长突然提出了一个很严重的问题,PHP是在服务器端运行的,而读卡器是连接在客户端的。之前测试的客户端服务器端都在一台电脑上面,真正项目部署是不可能这样.瞬间就石化了,屁颠屁颠忙了两天,忙的跟真的一样
可是项目还是要做的,生活还是要过的,赶鸭子也是得上架的。苦思冥想十几分钟.既然是客户端读取硬件,必须用浏览器的插件实现,于是瞬间想到了老本行Java里面的applet.觉得这是一条可以走通的路,没办法,摸着石头过河也得过啊。一步一步走吧.
最简单的applet
第一步,首先弄明白applet怎么实现(说实话,以前真没写过applet).网上查了些资料,编码也不是很难.代码大致如下(由于是在家写的,代码在公司,所以只能凭记忆大概写点了)
//Java代码
//包含包的部分省略,记不得了
class ICCARD extend Applet{
public void paint(Graphics g)
g.drawString("Hello Applet",50,50);
}//HTML代码
<html>
<body>
<applet id="applet" code="ICCARD.class" width="500" height="500"/>
</body>
</html>记得要javac ICCARD.java.然后把html和class放在同一目录下,浏览器打开,根据你的安全设置,会有不同提示,一般IE默认会提示是不安装Activex控件,同意即可,Firefox则没有提示,直接就运行了(个人还是比较喜欢Firefox的,尤其里面的firebug).
applet和JavaScript合体
大多数情况下,我们的Applet都不可能只有一个方法,所以如何执行我们想要的方法呢,换句话说就是如何和JavaScript交互呢。
//Javascript Code
var applet = document.getElementById("applet");
applet.hello();其实Javascript和Applet交互就这么简单(注意,这里是JavaScript调用Applet,不是Applet调用JS.关于Applet中调用JS,可自己搜索相关资料).
如果hello()有返回值的话,JS还可以接受返回值。
最简单的JNI
第一个主要模块Applet已经基本实现,按照我们的设想,applet下载到客户端执行,然后读取客户端的dll.貌似行的通.所以接下来的关键问题就是Java 如何读取dll,换句话说就是Java如何和其他语言协同工作,很明显,JNI闪亮登场。接下来主要就是解决JNI的问题,所以我们暂且抛开applet的环境,用最最简单的方法调试JNI.
//Java Code
public class Hello{//必须要先把我们的dll库load进来,我们的native方法才能运行
static{
System.loadLiberary("Hello");
}
public native void hello();
}Java要做的就这么多,具体的实现就交给C++了(我用的是VC6.0)
第一步生成class文件 javac Hello.java
第二部生成C++引用的头文件javah Hello.生成文件内容如下
代码
这里我们只关心那个方法,把方法copy到下面的c++source file里面
第三部具体的C++代码实现.
新建dll工程->新建c++ source file
//c++ code
#include <stdio.h>
#include <jni.h>
#include <Hello.h>//从Hello.h拷贝来的
JNIEXPORT void JNICALL Java_Hello_hello
(JNIEnv *, jobject){
printf("Hello C++");
}不用怀疑c++代码就这么简单,但是jni.h和Hello.h的路径要设置正确,编译器才能找到这两个文件
jni.h在jdk/include下
jni.h里面还会包含一个jni_md.h,在jdk/include/win32目录下
Hello.h就随便你放了
把以上提到的路径加到C++的库目录下.工具->选项->目录.
然后编译dll,就会生成我们需要的dll文件.
这个dll的文件名,就是我们在java代码中System.loadLiberary("Hello")里面的这个参数,大小写无所谓,后缀名不需要,会自动识别。
System.loadLiberary()这个方法会默认搜索几个目录,把dll放在正确的目录下,JVM就能自动加载了.然后我们的native就能运行了。
java Hello,控制台输入Hello C++;
这里只是提供了一个JNI最简单的实现,更详细的JNI编程,如参数传递等请参考http://www.docin.com/p-46800196.html
Applet和JNI合体
上面我们的JNI是没有在applet环境下运行的,下面就要把Applet和JNI结合起来了。
//Java code
import java.applet.Applet;
public Hello extend Applet{
//从Applet继承
public void init(){
System.loadLiberary("Hello");
}
public native String hello();
}//C++ code
#include <stdio.h>
#include <jni.h>
#include <Hello.h>
//从Hello.h拷贝来的
JNIEXPORT jstring JNICALL Java_Hello_hello (JNIEnv *env, jobject){
return env->NewStringUTF("Hello JavaScript");
}这里涉及到了传参的问题,详细内容请参考上面给出的网址。
//JS Code
var applet = document.getElementById("applet");
alert(applet.hello());这里几个主要的代码就这样,至于其他次要的工作,由于时间有限,就不再一一赘述.
到了这里我们发现,由于Applet是在客户端运行的,那么我们如何把我们的dll也放到客户端呢.
首先,试试把class文件和dll打包一起发到客户端行不行呢,jar -cvf Hello.jar *.class *.dll.注意,打包的话<applet>标签里面就要加个archive属性,archive="Hello.jar".
打开浏览器,结果失败了,同志们就不要再试了。
那么最简单的方法,就是手动拷贝到客户端(至于自动用Applet下载到客户端,我没有尝试过,有兴趣可以试试).把我们的dll拷贝到system32下.(由于我们项目的客户端比较少,比较单一,所以还不至于被骂).
再打开浏览器运行,如果前面步骤都没问题的话,浏览器应该会报access denied错误.紧要关头,突现离奇错误,为虾米呢?请听下文分解.
applet数字签名
其实动动脚指头就能想得通了,为了安全,applet不可能具有肆无忌惮的权限,想读就读,想写就写,那样网络世界就乱套了。applet默认的安全机制是阻止对客户端的任何操作的(必须阻止).那我们就要想办法允许applet有读写权限。又接着去网上查了许多资料,发现有的人说可以读写,有的人说不能(我的心凉了一半啊,都进行到这一步了,我容易吗我),但是不管怎样,只要还有希望,就要继续努力.按照网友们给出的方法,对applet的jar包签名.
首先把.class都打成jar包:jar -cvf iccard.jar *.class
然后用jdk/bin目录下的keytool生成.store文件:keytool -genkey -keystore iccard.store -alias Mission -validity 999.这样会提示你输入一些信息,最后时候确认即可.
最后用jdk/bin下的jarsigner给jar文件签名 jarsigner -verbose -keystore iccard.store iccard.jar Mission.会提示你输入密码,然后会打印出签名的过程(verbose参数的作用).
关于applet签名的过程,可以去百度“applet签名”,由于以上只凭记忆写的,所以难免有不准的地方。
好了,这下我们的jar包可厉害了,它已经不是一般的jar包了,它是一个签过名的jar包,一个具有对客户端读写权限的jar包.好了,现在让我们满怀期待的打开浏览器,嗯,IE提示是否允许Active,允许,然后就跳出窗口让我们验证签名,允许。。然后,OMG,顺利执行了,然后,然后就没有然后了。
总结:
虽然功能可以实现,可以跨浏览器,但是缺点也是比较多的。
1.首先,要把我们的dll拷贝到客户端。
2.其次,客户端还要装JRE
由于我们的客户端用IC读卡器的比较少,所以这至少还是一个行之有效的方案,如果面向客户比较多的话,我觉得可一开发BHO(浏览器帮助对象).这已经不是本文讨论范围.
-
C#编程经验技巧宝典
2008-06-01 08:59:33112 <br>0188 如何在ASP.NET中显示当前IE浏览器头信息 113 <br>5.6 其他应用技巧 114 <br>0189 如何判断年份是否为闰年 114 <br>0190 如何根据年份判断十二生肖 114 <br>0191 如何根据IP... -
单片机应用技术选编(10).(北航出版.何立民)
2016-06-09 11:38:576.19 基于USB接口的IC卡读写器的设计(498) 6.20 IEEE 1394总线技术与应用(501) 第七章 可靠性及安全性技术 7.1 单片机复位电路的可靠性分析(508) 7.2 提高移位寄存器接口电路可靠性的措施(515) 7.3 单片机嵌入式... -
C#程序开发范例宝典电子书从1-471例后面的暂时没有
2008-10-16 21:15:36实例047 如何为MDI类型窗体设置背景图片 48 实例048 向提示框中添加图标 49 第2章 控件应用 51 2.1 TextBox控件应用 52 实例049 只允许输入数字的TextBox控件 52 实例050 限制用户名称长度及设置密码文本... -
Visual C++程序开发范例宝典(光盘) 第四部分
2010-04-25 13:32:56实例326 利用IC卡制作考勤程序 12.4 监控 实例327 利用简易摄像头编写监控程序 实例328 编写监控录像程序 实例329 定时监控程序 实例330 医疗行业数字视频监控系统 实例331 远程视频监控系统 12.5 扫描、... -
Visual C++程序开发范例宝典(光盘) 第三部分
2010-04-25 13:26:03实例326 利用IC卡制作考勤程序 12.4 监控 实例327 利用简易摄像头编写监控程序 实例328 编写监控录像程序 实例329 定时监控程序 实例330 医疗行业数字视频监控系统 实例331 远程视频监控系统 12.5 扫描、... -
Visual C++程序开发范例宝典(光盘) 第一部分
2010-04-25 13:13:05实例326 利用IC卡制作考勤程序 12.4 监控 实例327 利用简易摄像头编写监控程序 实例328 编写监控录像程序 实例329 定时监控程序 实例330 医疗行业数字视频监控系统 实例331 远程视频监控系统 12.5 扫描、... -
Visual C++程序开发范例宝典(光盘) 第八部分
2010-04-25 13:46:42实例326 利用IC卡制作考勤程序 12.4 监控 实例327 利用简易摄像头编写监控程序 实例328 编写监控录像程序 实例329 定时监控程序 实例330 医疗行业数字视频监控系统 实例331 远程视频监控系统 12.5 扫描、... -
Visual C++程序开发范例宝典(光盘) 第六部分
2010-04-25 13:39:21实例326 利用IC卡制作考勤程序 12.4 监控 实例327 利用简易摄像头编写监控程序 实例328 编写监控录像程序 实例329 定时监控程序 实例330 医疗行业数字视频监控系统 实例331 远程视频监控系统 12.5 扫描、... -
Visual C++程序开发范例宝典(光盘) 第七部分
2010-04-25 13:43:32实例326 利用IC卡制作考勤程序 12.4 监控 实例327 利用简易摄像头编写监控程序 实例328 编写监控录像程序 实例329 定时监控程序 实例330 医疗行业数字视频监控系统 实例331 远程视频监控系统 12.5 扫描、... -
Visual C++程序开发范例宝典(光盘) 第二部分
2010-04-25 13:23:12实例326 利用IC卡制作考勤程序 12.4 监控 实例327 利用简易摄像头编写监控程序 实例328 编写监控录像程序 实例329 定时监控程序 实例330 医疗行业数字视频监控系统 实例331 远程视频监控系统 12.5 扫描、... -
Visual C++程序开发范例宝典(光盘) 第五部分
2010-04-25 13:35:43实例326 利用IC卡制作考勤程序 12.4 监控 实例327 利用简易摄像头编写监控程序 实例328 编写监控录像程序 实例329 定时监控程序 实例330 医疗行业数字视频监控系统 实例331 远程视频监控系统 12.5 扫描、... -
Visual C++程序开发范例宝典 含本书光盘源码(1-16章)全部共399个实例
2010-02-09 10:30:25cc实例181 用列表显示系统正在运行的程序 cc实例182 为程序添加快捷方式 cc实例183 设置其他程序中编辑框内的文本 cc实例184 执行一个外部程序直到其结束 cc实例185 调用具有参数的可执行... -
Visual C++程序开发范例宝典(PDF扫描版).part3
2015-03-15 20:51:39cc实例181 用列表显示系统正在运行的程序 cc实例182 为程序添加快捷方式 cc实例183 设置其他程序中编辑框内的文本 cc实例184 执行一个外部程序直到其结束 cc实例185 调用具有参数的可执行... -
程序开发范例宝典>>
2012-10-24 10:41:28实例055 用ComboBox控件制作浏览器网址输入框 64 2.3 RichTextBox控件应用 65 实例056 在RichTextBox控件中添加超链接文字 65 实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox... -
Visual C++ 程序开发范例宝典 源码 光盘 part1
2010-05-17 15:17:247.2 IE设置 cc实例195 修改IE标题栏内容 cc实例196 隐藏IE浏览器的右键关联菜单 cc实例197 设置IE的默认主页 cc实例198 清空上网历史记录 7.3 文件控制 cc实例199 如何建立文件关联 cc实例200 控制... -
Visual C++ 程序开发范例宝典 源码 光盘 part2
2010-05-17 15:19:567.2 IE设置 cc实例195 修改IE标题栏内容 cc实例196 隐藏IE浏览器的右键关联菜单 cc实例197 设置IE的默认主页 cc实例198 清空上网历史记录 7.3 文件控制 cc实例199 如何建立文件关联 cc实例200 控制... -
书 名:程序开发范例宝典>>【中卷】(分三卷上传完本书案例)
2010-04-05 21:59:37实例055 用ComboBox控件制作浏览器网址输入框 64 2.3 RichTextBox控件应用 65 实例056 在RichTextBox控件中添加超链接文字 65 实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件... -
书 名:程序开发范例宝典>>【下卷】(分三卷上传完本书案例)
2010-04-05 03:24:09实例055 用ComboBox控件制作浏览器网址输入框 64 2.3 RichTextBox控件应用 65 实例056 在RichTextBox控件中添加超链接文字 65 实例057 在RichTextBox控件中显示RTF格式的文件 66 实例058 为RichTextBox控件... -
软件工程师典藏:C#程序开发范例宝典(第2版).part01
2012-11-11 20:05:51全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、即用。 第1章 窗体... -
C#程序开发范例宝典(第2版).part02
2012-11-12 07:55:11全面覆盖实用和热点技术,涉及面广,实用性强源于实际项目开发,帮助读者短时间掌握更多实用技术,提高编程水平范例经过精心编排,重点、难点突出,易学易懂书后附录提供快速索引,即查、即学、即用。 第1章 窗体...
-
1.SpringMVC初始与Controller接口开发
-
迪普食品-源码
-
环境气体中激光诱导Fe等离子体发射光谱的时间演化特性
-
深究字符编码的奥秘,与乱码说再见
-
虚幻4引擎基础
-
Sourcetree 跳过注册方法 for Windows
-
SecureCRT 连接 GNS3/Linux 的安全精密工具
-
虚函数,虚表深度剖析
-
紫外区全角度光子晶体反射镜
-
看《西游记》悟团队建设
-
2021 年该学的 CSS 框架 Tailwind CSS 实战视频
-
Docker从入门到精通
-
ELF视频教程
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
记录一下leetcode:1178猜字谜
-
MySQL 主从复制 Replication 详解(Linux 和 W
-
产品团队管理经验一枚
-
2021-02-27
-
Shell学习计划——Shell 变量
-
小屏幕大世界“Next”背后的秘密