本示例使用的发卡器:https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.1d292c1btRvdS1&ft=t&id=615391857885
使用Jni调用
public class icreadertest {
public native static byte pcdbeep(int xms); //让设备发出声音
public native static byte pcdgetdevicenumber(byte[] devicenumber); //读取设备编号
public native static byte piccreadex(byte ctrlword,byte[] serial,byte area,byte keyA1B0,byte[] picckey,byte[] piccdata0_2); //轻松读卡
public native static byte piccwriteex(byte ctrlword,byte[] serial,byte area,byte keyA1B0,byte[] picckey,byte[] piccdata0_2); //轻松写卡
public native static byte piccchangesinglekey(byte ctrlword,byte[] serial,byte area,byte keyA1B0,byte[] piccoldkey,byte[] piccnewkey); //改单区密码
public native static byte piccchangesinglekeyex(byte ctrlword,byte[] serial,byte area,byte keyA1B0,byte[] piccoldkey,byte[] piccdata); //改单区密码,可同时修改A密码,或密码权限访问字(密码权限编码)或B密码
public native static byte piccauthkey1(byte[] serial,byte area,byte keyA1B0,byte[] picckey); //认证卡片密码
public native static byte piccrequest(byte[] serial); //寻卡
public native static byte piccread(byte block,byte[] blockdate); //读指定块信息
public native static byte piccwrite(byte block,byte[] blockdate); //写指定块信息
public native static byte piccwriteserial(byte ctrlword,byte[] serial,byte keyA1B0,byte[] piccoldkey,byte[] piccdata); //写指定块信息
public native static byte sfzrequest(byte[] serial); //读身份证UID
public native static byte iso15693iclassreadcsn(byte[] serial); //读iCLASS卡CSN
public native static byte picccmd(byte BitFramingVal, byte ChannelRedundancyVal, byte[] sendbuf, int sendbitlen, byte[] revbuf, byte[] revbitlen, byte TimerFlagval); //透传读写M1调试指令
static{
String osName = System.getProperty("os.name").toLowerCase();
if (osName.contains("windows")) {
System.load( System.getProperty("user.dir") +"\\OUR_MIFARE.dll");
} else if (osName.contains("nix") || osName.contains("nux")) {
System.load(System.getProperty("user.dir") + "/libOURMIFARE.so");
} else if (osName.contains("mac")) {
System.load(System.getProperty("user.dir") + "/libOURMIFARE.dylib");
}
}
}
使用Jna调用
import com.sun.jna.Library ;
import com.sun.jna.Native;
import com.sun.jna.Platform;
interface CLibrary extends Library {
//不同版本的读写器,接口DLL文件名称、函数名称是一样的,但内核代码不一样,请选用与读写器、操作系统一致的OUR_MIFARE.dll
CLibrary INSTANCE = loadLibrary();
static CLibrary loadLibrary() {
if (Platform.isWindows()) {
return Native.loadLibrary(System.getProperty("user.dir") +"\\OUR_MIFARE.dll", CLibrary.class);
} else if (Platform.isLinux()) {
return Native.loadLibrary(System.getProperty("user.dir") + "/libOURMIFARE.so", CLibrary.class);
} else if (Platform.isMac()) {
return Native.loadLibrary(System.getProperty("user.dir") + "/libOURMIFARE.dylib", CLibrary.class);
} else {
throw new RuntimeException("Unsupported operating system");
}
}
//动态链接库中的方法
byte pcdbeep(int xms); //让设备发出声音
byte pcdgetdevicenumber(byte[] devicenumber); //读取设备编号
byte piccreadex(byte ctrlword,byte[] serial,byte area,byte keyA1B0,byte[] picckey,byte[] piccdata0_2); //轻松读卡
byte piccwriteex(byte ctrlword,byte[] serial,byte area,byte keyA1B0,byte[] picckey,byte[] piccdata0_2); //轻松写卡
byte piccchangesinglekey(byte ctrlword,byte[] serial,byte area,byte keyA1B0,byte[] piccoldkey,byte[] piccnewkey); //改单区密码
byte piccchangesinglekeyex(byte ctrlword,byte[] serial,byte area,byte keyA1B0,byte[] piccoldkey,byte[] piccdata); //改单区密码,可同时修改A密码,或密码权限访问字(密码权限编码)或B密码
byte piccrequest(byte[] serial); //寻卡
byte piccauthkey1(byte[] serial,byte area,byte keyA1B0,byte[] picckey); //认证卡片密码
byte piccread(byte block,byte[] blockdate); //读指定块信息
byte piccwrite(byte block,byte[] blockdate); //写指定块信息
byte piccwriteserial(byte ctrlword,byte[] serial,byte keyA1B0,byte[] piccoldkey,byte[] piccdata); //写UID
byte sfzrequest(byte[] serial); //读身份证UID
byte iso15693iclassreadcsn(byte[] serial); //读iCLASS卡CSN
byte picccmd(byte BitFramingVal, byte ChannelRedundancyVal, byte[] sendbuf, int sendbitlen, byte[] revbuf, byte[] revbitlen, byte TimerFlagval); //透传读写M1调试指令
}