灌木大叔

每一个不曾起舞的日子都是对以往生命的辜负!!

  :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::
  89 随笔 :: 114 文章 :: 4 评论 :: 22万 阅读

留存,转载自如下网址:

https://blog.csdn.net/iteye_1831/article/details/81964120

https://www.iteye.com/blog/losn-816741

 

前段时间的一个web项目搞了个指纹登陆,用的是中控的Biokey 开发工具,安装控件驱动神马的, 就不多说了,zkonline的SDK里都有,由于指纹需要在服务器端做比对,但SDK里只提供了DLL库的方式来解决比对问题,所以需要让java调用DLL库。。。在网上找到JNative这个东东来调用DLL里的方法。下面大概说一下实现的过程

1、下载JNative,我下的是JNative-1.3.2 这个包,解压后,包括JNative.jar,JNativeCpp.dll,libJNativeCpp.so三个文件(“libJNativeCpp.so”ms是在linux下用的,没有仔细关注)。

2、将JNative.jar放在工程的lib下,有的文章说要放在jdk的安装目录下,但我试了没有成功,在工程的lib下是成功的。后来为了保险,在JDK安装目录的\jre\lib\ext下也放了一份。

3、将 JNativeCpp.dll 放到tomcat安装目录的\bin 路径下 这个tomcat的版本不同,路径有所不同,我的是tomcat5

4、将 ZKonlineSDK (BS)中的 Match.dll 放到tomcat安装目录的\bin 路径下,(与 JNativeCpp.dll 在同一目录)

5、以上准备工作完成之后,就是编码了。


import org.xvolks.jnative.JNative;
import org.xvolks.jnative.exceptions.NativeException;
import org.xvolks.jnative.pointers.Pointer;
import org.xvolks.jnative.pointers.memory.MemoryBlockFactory;
import org.xvolks.jnative.Type;

public class VerFinger {
//regFingertpl 为数据库中保存的指纹特征码
//verFingertpl 为需要被比对的指纹特征码
	public String isVerFinger(String regFingertpl, String verFingertpl) throws 
	NativeException, IllegalAccessException{
		JNative jna = null;
		try{
			if(jna == null){
				jna = new JNative("Match.dll","Process");//调用Mathc中的Process方法
				jna.setRetVal(Type.INT);	
			}
			jna.setParameter(0,Type.STRING,regFingertpl);//设置Process方法中的第一个参数
			jna.setParameter(1,Type.STRING,verFingertpl);//设置Process方法中的第二个参数
			jna.invoke();
			String val = jna.getRetVal();//获取Process方法的返回值
			return val;
		}
		finally{
			if(jna!=null){
				jna.dispose();
			}
		}
	}

}


接下来是isVerFinger方法的调用


String regFingertpl = udao.getUserFinger(userName);
			String verFingertpl = request.getParameter("fingertpl");
			VerFinger vf = new VerFinger();
			String is="";
			try {
				is = vf.isVerFinger(regFingertpl, verFingertpl);
			} catch (NativeException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if(is.equals("65535")){//当返回值为“65535”时,指纹特征码对比成功
				finger = "1";
				ableLogin = "1";

			}
			else if(is.equals("0"))")){//当返回值为“0”时,指纹特征码对比失败

			{
				finger = "0";
				ableLogin = "0";
			}


END
ps:初次写此类文章,如果不对之处,还希望多多批评指正,谢谢。

posted on   灌木大叔  阅读(416)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示