java讀取(華視)刷卡機的刷卡資訊
需求:刷卡機插在電腦上,使用java程式碼讀取身份證資訊
實現:使用java Swing開發java客戶端小程式,並生成可執行的exe檔案。
使用工具及需要的jar:因為刷卡機的開發包是dll檔案,dll檔案裡寫的刷卡機程式的初始化,讀卡等介面,需要先呼叫dll檔案,才能使用其介面。
jna.jar ----用來讀取dll檔案的jar
需要的dll檔案:
這些檔案需要放到jdk的jre的bin目錄下,且只支援32位的jdk。
exe4j ---- 把java程式做成可執行的exe軟體的工具。
#############################################程式碼部分#########################################
//身份證資訊類
public class IdReadDomain {
private String Name;
private String Gender;
private String Folk;
private String BirthDay;
private String Code;
private String Address;
private String Agency;
private String ExpireStart;
private String ExpireEnd;
private String Photo;
//讀取dll檔案裡介面
public class SDTIDread {
static{
System.loadLibrary("libSDTJNIidcard"); //libSDTJNIidcard位dll檔名稱
}
public static native int InitComm(); //初始化方法
public static native int Authenticate(); //身份證認證方法 用來判斷是否放置了身份證
public static native int CloseComm(); //關閉介面
public static native IdReadDomain idReadDomain();
}
所需的c++編寫的jni指令碼檔案,裡面定義了dll裡介面的名稱和呼叫位置
例:Java_com_zax_SDTIDread_InitComm --- com_zax為包名,SDTIDread介面類,InitComm介面名:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_zax_SDTIDread */
#ifndef _Included_com_zax_SDTIDread
#define _Included_com_zax_SDTIDread
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_zax_SDTIDread
* Method: InitComm
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_zax_SDTIDread_InitComm
(JNIEnv *, jclass);
/*
* Class: com_zax_SDTIDread
* Method: Authenticate
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_zax_SDTIDread_Authenticate
(JNIEnv *, jclass);
/*
* Class: com_zax_SDTIDread
* Method: CloseComm
* Signature: ()I
*/
JNIEXPORT jint JNICALL Java_com_zax_SDTIDread_CloseComm
(JNIEnv *, jclass);
/*
* Class: com_zax_SDTIDread
* Method: idReadDomain
* Signature: ()Lcom/zax/IdReadDomain;
*/
JNIEXPORT jobject JNICALL Java_com_zax_SDTIDread_idReadDomain
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
測試類:
public static void main(String[] args) {
String result = "";
//HttpRequest request = new HttpRequest();
//初始化埠檢查機器是否存在
int init = SDTIDread.InitComm();
if (init <= 0) {
System.out.println("裝置沒連線不是有效裝置");
return;
} else {
if (SDTIDread.Authenticate() > 0) {
//檢查卡片 讀取資訊
IdReadDomain test = SDTIDread.idReadDomain();
System.out.println("姓名:" + test.getName());
System.out.println("性別:" + test.getGender());
System.out.println("民族:" + test.getFolk());
System.out.println("出生:" + test.getBirthDay());
System.out.println("身份證號碼:" + test.getCode());
System.out.println("住址:" + test.getAddress());
System.out.println("簽發單位:" + test.getAgency());
System.out.println("有效期開始:" + test.getExpireStart());
System.out.println("有效期結束:" + test.getExpireEnd());
//System.out.println(Base64.PhotoJpg());
//System.out.println(Base64.PhotoBmp());
// System.err.println(Base64.PhotoCardJpg());
// SDTIDread.CloseComm();//關閉埠
} else {
System.out.println("沒有檢測到卡片");
return;
}
}
}
結果會在控制檯列印出身份證資訊。
接下來,新建刷卡類:
public class StartShuaKa {
public static void main(String[] args) {
JFrame jf = new JFrame("刷卡程式");
jf.setSize(600, 600);
jf.setLocationRelativeTo(null);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//佈局
JPanel panel = new JPanel();
//文字顯示
JLabel label = new JLabel("程式開啟.....");
/**
* 啟動執行緒
* */
StartThread startThread =new StartThread();
Thread thread =new Thread(startThread);
thread.start();
panel.add(label);
jf.setContentPane(panel);
jf.setVisible(true);
}
}
在main方法中使用swing佈局,生成exe檔案時候,啟動的是main方法,所以把邏輯寫線上程類裡,在啟動main方法時,執行緒自動呼叫StartThread類裡的邏輯。
執行緒類:
public class StartThread implements Runnable {
@Override
public void run() {
String url ="*************"; //業務需要呼叫的介面
while (sdktest.Init()>0){ //定義的初始化方法
while (sdktest.auth()){
String param ="idnumber="+sdktest.getInfo().getCode();
String result = HttpRequest.sendPost(url,param);
JSONObject jsonObject = JSONObject.fromObject(result);
String msg = (String) jsonObject.get("msg");
System.err.println("身份證號:"+sdktest.getInfo().getCode() +" "+ msg);
}
}
}
}
結果:
開啟後,只要刷卡就會展示刷卡資訊。
相關文章
- 刷卡原理
- 出門刷卡要小心!一種可以從POS機終端收集信用卡資訊的惡意軟體出現了
- 伯恩斯坦:蘋果Apple Pay佔全球刷卡交易量的 5%蘋果APP
- 微信開發超市全反系統,微信支付刷卡支付,微信介面簡單配置!
- Windows mobile 下讀取手機SIM卡資訊Windows
- spring boot(二)配置資訊的讀取Spring Boot
- angular中$location讀取url資訊Angular
- C#讀取EXIF資訊類C#
- Java 讀取PDF中的表格Java
- Java讀取File的問題Java
- ssts-hospital-web-master專案實戰記錄三十三:專案遷移-核心模組實現(useDeviceDriver-刷卡器)WebASTdev
- Java 讀取檔案Java
- Java 讀取 sun 包的原始碼Java原始碼
- Java屬性檔案的讀取Java
- Android NFC的初次使用——公交卡資訊讀取Android
- JAVA 讀取xml檔案JavaXML
- java讀取properties檔案Java
- java爬取豆瓣書籍資訊Java
- SpringBoot 複雜配置資訊讀取Spring Boot
- Python讀取Ansible playbooks返回資訊Python
- asp.net讀取Windows域(AD)資訊ASP.NETWindows
- Java API 讀取HDFS的單檔案JavaAPI
- Java獲取堆疊資訊的3種方法Java
- java獲取redis的日誌資訊和動態監控資訊JavaRedis
- Java系列:讀取XML檔案JavaXML
- java中讀取配置檔案Java
- java讀取視訊時長Java
- Java高效讀取大檔案Java
- java儲存讀取文字oracleJavaOracle
- java多現場讀取listJava
- C語言/C++讀取檔案資訊C語言C++
- ColdFusion如何從資料庫讀取資訊例子資料庫
- java 讀取指定某一行的文字Java
- Java 讀取PDF中的文字和圖片Java
- golang讀取java或者go的webservice服務GolangJavaWeb
- 【Python】獲取機器使用資訊Python
- Android獲取手機配置資訊Android
- linux下面獲取主機資訊Linux