package IDcardManage; import java.io.UnsupportedEncodingException; import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.ptr.IntByReference; import Frame.SendTag; import tbDataModel_Dell.Dell_adress_and_port; public class IDcard { private static final String CHARACTER_ENCODING = "gb2312"; public static IntByReference strLen=null; public static String name;//ÐÕÃû public static String sex;//ÐÔ±ð public static String minzu;//Ãñ×å public static String chushengdate;//³öÉúÈÕÆÚ public static String address;//µØÖ· public static String idnum;//Éí·ÝÖ¤ºÅ public static String fazhengjiguan;//·¢Ö¤»ú¹Ø public static String startdate;//¿ªÊ¼ÈÕÆÚ public static String jizhidate;//½ØÖÁÈÕÆÚ public static String UID;//UID public static IntByReference len = new IntByReference(); public static boolean renzheng=false; public static String state;//״̬ public static int i=0; public static int kaohao; /** * ¶¯Ì¬Á´½Ó¿â±àÒëʱѡÔñµÄƽ̨¡£Èç¹ûͨ¹ýx86ƽ̨±àÒ룬ÄÇôֻÄÜʹÓÃ32λjdk»·¾³¼ÓÔØ£¬Èç¹ûҪʹÓÃ64λjdk,±ØÐëʹÓÃx64ƽ̨±àÒë¡£ * * ½Ó¿ÚÄÚ²¿ÐèÒªÒ»¸ö¹«¹²¾²Ì¬³£Á¿£ºINSTANCE£¬Í¨¹ýÕâ¸ö³£Á¿£¬¾Í¿ÉÒÔ»ñµÃÕâ¸ö½Ó¿ÚµÄʵÀý£¬´Ó¶øÊ¹Óýӿڵķ½·¨£¬Ò²¾ÍÊǵ÷ÓÃÍⲿdll/soµÄº¯Êý¡£ * ¸Ã³£Á¿Í¨¹ýNative.loadLibrary()Õâ¸öAPIº¯Êý»ñµÃ£¬¸Ãº¯ÊýÓÐ2¸ö²ÎÊý£º * * µÚÒ»¸ö²ÎÊýÊǶ¯Ì¬Á´½Ó¿âdll/soµÄÃû³Æ£¬µ«²»´ø.dll»ò.soÕâÑùµÄºó׺£¬Õâ·ûºÏJNIµÄ¹æ·¶£¬ÒòΪ´øÁ˺ó׺Ãû¾Í²»¿ÉÒÔ¿ç²Ù×÷ϵͳƽ̨ÁË¡£ * ËÑË÷¶¯Ì¬Á´½Ó¿â·¾¶µÄ˳ÐòÊÇ£ºÏÈ´Óµ±Ç°ÀàµÄµ±Ç°Îļþ¼ÐÕÒ£¬Èç¹ûûÓÐÕÒµ½£¬ÔÙÔÚ¹¤³Ìµ±Ç°Îļþ¼ÐÏÂÃæÕÒwin32/win64Îļþ¼Ð£¬ * ÕÒµ½ºóËÑË÷¶ÔÓ¦µÄdllÎļþ£¬Èç¹û ÕÒ²»µ½ÔÙµ½WINDOWSÏÂÃæÈ¥ËÑË÷£¬ÔÙÕÒ²»µ½¾Í»áÅ×Òì³£ÁË¡£ * µÚ¶þ¸ö²ÎÊýÊDZ¾½Ó¿ÚµÄClassÀàÐÍ¡£JNAͨ¹ýÕâ¸öClassÀàÐÍ£¬¸ù¾ÝÖ¸¶¨µÄ.dll/.soÎļþ£¬¶¯Ì¬´´½¨½Ó¿ÚµÄʵÀý¡£ * ¸ÃʵÀýÓÉJNAͨ¹ý·´Éä×Ô¶¯Éú³É¡£ * * ½Ó¿ÚÖÐÖ»ÐèÒª¶¨ÒåÄãÒªÓõ½µÄº¯Êý»òÕß¹«¹²±äÁ¿£¬²»ÐèÒªµÄ¿ÉÒÔ²»¶¨Ò壬עÒâ²ÎÊýºÍ·µ»ØÖµµÄÀàÐÍ£¬Ó¦¸ÃºÍÁ´½Ó¿âÖеĺ¯ÊýÀàÐͱ£³ÖÒ»Ö¡£ * ¶¨ÒåºÃ½Ó¿Úºó£¬¾Í¿ÉÒÔʹÓýӿÚÖеĺ¯Êý¼´ÏàÓ¦dll/soÖеĺ¯ÊýÁË */ interface DLibrary extends Library { //´Ë´¦ÎÒµÄjdk°æ±¾Îª64λ,¹Ê¼ÓÔØ64λµÄDll DLibrary INSTANCE = (DLibrary) Native.loadLibrary("Termb",DLibrary.class); //JNA.dll Öж¨ÒåµÄº¯Êý /** * ±¾º¯ÊýÓÃÓÚPCÓ뻪ÊÓµç×ÓµÚ¶þ´ú¾ÓÃñÉí·ÝÖ¤ÔĶÁÆ÷µÄÁ¬½Ó * @param Port Á¬½Ó´®¿Ú£¨COM1~COM16£©»òUSB¿Ú(1001~1016) * @return 1 ÕýÈ· 2 ¶Ë¿Ú´ò¿ªÊ§°Ü 0 ¶¯Ì¬¿â¼ÓÔØÊ§°Ü */ int CVR_InitComm(int Port) ;// ³õʼ»¯Á¬½Ó; int CVR_SetBaudRate(int nBaudRate); //ÉèÖò¨ÌØÂÊ /** * ±¾º¯ÊýÓÃÓڹرÕPCµ½ÔĶÁÆ÷µÄÁ¬½Ó¡£ * @return 1 ÕýÈ· 0 ´íÎó */ int CVR_CloseComm() ;//¹Ø±ÕÁ¬½Ó; /** * ±¾º¯ÊýÓÃÓÚ¶Á¿¨Æ÷ºÍ¿¨Æ¬Ö®¼äµÄºÏ·¨Éí·ÝÈ·ÈÏ¡£¿¨ÈÏ֤ѭ»·¼ä¸ô´óÓÚ300ms¡£ Èô¿¨Æ¬·ÅÖúó·¢ÉúÈÏÖ¤´íÎóʱ£¬Ó¦ÒÆ×ß¿¨Æ¬ÖØÐ·ÅÖᣠ* @return 1 ÕýÈ· ¿¨Æ¬ÈÏÖ¤³É¹¦ 2 ´íÎó Ѱ¿¨Ê§°Ü 3 ´íÎó Ñ¡¿¨Ê§°Ü 0 ´íÎó ³õʼ»¯Ê§°Ü */ int CVR_Authenticate(); //¿¨ÈÏÖ¤; /** * ±¾º¯ÊýÓÃÓÚͨ¹ýÔĶÁÆ÷´ÓµÚ¶þ´ú¾ÓÃñÉí·ÝÖ¤ÖжÁÈ¡ÏàÓ¦ÐÅÏ¢¡£¿¨ÈÏÖ¤³É¹¦ÒÔºó²Å¿É×ö¶Á¿¨²Ù×÷£¬ ¶Á¿¨Íê±ÏÈô¼ÌÐø¶Á¿¨Ó¦ÒÆ×ß¶þ´úÖ¤¿¨Æ¬ÖØÐ·ÅÖÃ×ö¿¨ÈÏÖ¤¡£ * ¶Á¿¨³É¹¦ºóÔÚtermb.dllÎļþËùÔÚ·¾¶ÏÂÉú³Éwz.txt£¨ÎÄ×ÖÐÅÏ¢£©ºÍzp.bmp£¨ÕÕÆ¬ÐÅÏ¢£© wz.txtÄÚÈÝʾÀýÈçÏ£º ÕźìÒ¶ Å® ºº * 1988-11-18 ºÓ±±Ê¡ºªµ¦ÊÐÁÙÕÄÏØ³Æ¹´Õò³Æ¹´¶«´å¸´ÐË·25ºÅ 130423198811184328 ÁÙÕÄÏØ¹«°²¾Ö * 2011.03.30-2021.03.30 ¶Á¸÷ÏîÎÄ×ÖÐÅÏ¢µ½×Ô¶¨ÒåÄڴ滺³å * @param active ¼æÈÝÒÔǰ°æ±¾£¬ÎÞʵ¼ÊÒâÒ壬 1 ¶ÁÈ¡»ù±¾ÐÅÏ¢£¬2 Ö»¶ÁÎÄ×ÖÐÅÏ¢ £¬3 Ö»¶Á×îÐÂסַÐÅÏ¢£¬5 оƬ¹ÜÀí * @return 1 ÕýÈ· 0 ´íÎó 99 Òì³£ */ int CVR_Read_Content(int active); int CVR_Read_FPContent(); //¶Á¿¨²Ù×÷£¬º¬Ö¸ÎÆ¡£ int CVR_FindCard (); //ÕÒ¿¨ int CVR_SelectCard ();//Ñ¡¿¨ int GetPeopleName(byte[] strTmp, IntByReference strLen);//µÃµ½ÐÕÃûÐÅÏ¢ int GetPeopleSex( byte[] strTmp, IntByReference strLen);//µÃµ½ÐÔ±ðÐÅÏ¢ int GetPeopleNation(byte[] strTmp, IntByReference strLen);//µÃµ½Ãñ×åÐÅÏ¢ int GetPeopleBirthday(byte[] strTmp, IntByReference strLen);//µÃµ½³öÉúÈÕÆÚ int GetPeopleAddress(byte[] strTmp, IntByReference strLen);//µÃµ½µØÖ·ÐÅÏ¢ int GetPeopleIDCode(byte[] strTmp, IntByReference strLen);//µÃµ½Éí·ÝÖ¤ºÅÐÅÏ¢ int GetDepartment(byte[] strTmp, IntByReference strLen);//µÃµ½·¢Ö¤»ú¹ØÐÅÏ¢ int GetStartDate(byte[] strTmp, IntByReference strLen);//µÃµ½ÓÐЧ¿ªÊ¼ÈÕÆÚ int GetEndDate(byte[] strTmp, IntByReference strLen);//µÃµ½ÓÐЧ½ØÖ¹ÈÕÆÚ int CVR_GetSAMID(byte[] SAMID);//µÃµ½°²È«Ä£¿éºÅ int CVR_GetIDCardUID(byte[] pUidBuff, int nBuffLen);//È¡µÃÉí·ÝÖ¤UID int GetFPDate (byte[] pData, IntByReference pLen);// µÃµ½Ö¸ÎÆÊý¾Ý£¬²»³¬¹ý1024×Ö½Ú int GetBMPData (byte[] pData, IntByReference pLen);// µÃµ½Í·ÏñÕÕÆ¬bmpÊý¾Ý£¬²»³¬¹ý38862×Ö½Ú int Getbase64BMPData (byte[] pData, IntByReference pLen);// µÃµ½Í·ÏñÕÕÆ¬base64±àÂëÊý¾Ý£¬²»³¬¹ý38862*2×Ö½Ú int Getbase64JpgData (String pData, IntByReference pLen);//µÃµ½Í·ÏñÕÕÆ¬jpgÊý¾Ý£¬²»³¬¹ý38862×Ö½Ú //¶Á¿¨º¬Ë°Ô­ÐÍint M1_MF_HL_Request (byte Mode, byte* SNR, byte* TagType); /**@param Mode[in]£º¶Á¿¨Ä£Ê½ ;0£ºIDLEģʽ£¬Ö»Ñ¡ÔñÌìÏß·¶Î§ÄÚIDLEģʽµÄ¿¨Æ¬; 1£ºALLģʽ£¬Ñ¡ÔñÌìÏß·¶Î§ÄÚµÄËùÓп¨Æ¬ * @param SNR[out]£º¿¨ºÅÊý¾Ý£¬³¤¶ÈΪ4 * @param TagType[out]£º±êÇ©ÀàÐÍ£¬³¤¶ÈΪ2 **/ int M1_MF_HL_Request (byte Mode, int[] SNR, short[] TagType); //Ô­ÐÍint M1_MF_HL_Auth (byte Mode, byte* SNR, byte Block, byte* Key); /**@paramMode[in]£º¶Á¿¨Ä£Ê½;0£ºIDLEģʽ£¬Ö»Ñ¡ÔñÌìÏß·¶Î§ÄÚIDLEģʽµÄ¿¨Æ¬ ;1£ºALLģʽ£¬Ñ¡ÔñÌìÏß·¶Î§ÄÚµÄËùÓп¨Æ¬ *@paramModeSNR[out]£º¿¨ºÅÊý¾Ý,³¤¶ÈΪ4 *@paramModeBlock [in]£º¿¨Æ¬Block¿éµØÖ·Öµ *@paramModeKey [in]£º¿¨Æ¬ÃÜÂ룬³¤¶ÈΪ6 */ int M1_MF_HL_Auth (byte Mode, int[] SNR, byte Block, int[] Key); //º¬Ë°Ô­ÐÍint M1_MF_HL_Read (byte Mode, byte* SNR, byte Block, byte* Key, byte* buffer, UINT nBuff); /**@param Mode[in]£º¶Á¿¨Ä£Ê½ @param 0£ºIDLEģʽ£¬Ö»Ñ¡ÔñÌìÏß·¶Î§ÄÚIDLEģʽµÄ¿¨Æ¬ @param 1£ºALLģʽ£¬Ñ¡ÔñÌìÏß·¶Î§ÄÚµÄËùÓп¨Æ¬ @param SNR[out]£º¿¨ºÅÊý¾Ý,³¤¶ÈΪ4 @param Block [in]£º¿¨Æ¬Block¿éµØÖ·Öµ @param Key [out]£º¿¨Æ¬ÃÜÂ룬³¤¶ÈΪ6 @param buffer [out]£º¿¨ÇøµÄÊý¾Ý,³¤¶ÈΪ16 **/ int M1_MF_HL_Read (byte Mode, int[] SNR, byte Block, int[] Key, int buffer); //д¿¨ /**Mode[in]£º¶Á¿¨Ä£Ê½ 0£ºIDLEģʽ£¬Ö»Ñ¡ÔñÌìÏß·¶Î§ÄÚIDLEģʽµÄ¿¨Æ¬ 1£ºALLģʽ£¬Ñ¡ÔñÌìÏß·¶Î§ÄÚµÄËùÓп¨Æ¬ SNR[out]£º¿¨ºÅÊý¾Ý,³¤¶ÈΪ4 Block [in]£º¿¨Æ¬Block¿éµØÖ·Öµ Key [out]£º¿¨Æ¬ÃÜÂ룬³¤¶ÈΪ6 buffer [out]£ºÐ´Èë¿¨ÇøµÄÊý¾Ý,³¤¶ÈΪ17 [0]:´ú±íBlock¿éÈç04 [1]:´ú±íдÈë¿éÇøÄÚµÄÊý¾Ý,´«Èë´Ë´¦Êý×鵨ַ */ // int M1_MF_HL_Write (byte Mode, byte* SNR, byte Block, byte* Key, byte* buffer); /**FisCardID [out]£º½ðÈÚ¿¨¿¨ºÅÊý¾Ý LifeEndData [out]£º½ðÈÚ¿¨ÓÐЧÆÚ FisCardIDLen [out]£º½ðÈÚ¿¨¿¨ºÅ³¤¶È **/ // int M1_MF_GetFisCardID(BYTE* FisCardID, BYTE* LifeEndData,int* FisCardIDLen); } /**³õʼ»¯Á¬½Ó*/ public static void chushi() { CVR_InitComm();// ³õʼ»¯Á¬½Ó; CVR_SetBaudRate();//ÉèÖò¨ÌØÂÊ } public static int RedaCard() { //1.´ò¿ª´®¿Ú£»2.ÉèÖò¨ÌØÂÊ£»3.Ѱ¿¨£»4.Ñ¡¿¨£»5.¶Á¿¨²Ù×÷£»6.¹Ø±ÕÁ¬½Ó //CVR_Authenticate();//¿¨ÈÏÖ¤ int red=Read_Content();//¶Á¿¨ //close();//¹Ø±ÕÁ¬½Ó return red; } /**¶ÁM1¿¨*/ public static int Read_M1() { byte Mode=0; int[] SNR= {1,2}; short[] TagType= {1,2}; int bb=DLibrary.INSTANCE.M1_MF_HL_Request ( Mode,SNR,TagType ); kaohao=SNR[0]; if(bb==4) { state="Éí·ÝÖ¤ÐÅÏ¢¶ÁÈ¡³É¹¦£¬¶Á¿¨³É¹¦ÇëÈ¡×ß¿¨£¡"; }else { state="¶Á¶¨Î»¿¨Ê§°Ü£¡"; } System.out.println("·µ»ØÖµ"+bb); System.out.println("¿¨ÀàÐÍ"+TagType[0]); System.out.println("¿¨ºÅ"+SNR[0]); return bb; } /**ѰM1¿¨*/ public static int M1_MF_HL_Request() { close(); chushi(); CVR_Authenticate(); int cc=Read_M1(); return cc; } /**ѰM1¿¨*/ public static int M1_MF_HL_Read() { byte Mode=0; int[] SNR= {1,2}; short[] TagType= {1,2}; byte Block=0; int[] Key={1,2}; int buffer=16; int bb=DLibrary.INSTANCE.M1_MF_HL_Read(Mode, SNR, Block, Key, buffer); kaohao=SNR[0]; if(bb==4) { state="¶Á¿¨³É¹¦ÇëÈ¡×ß¿¨£¡"; }else { state="¶Á¶¨Î»¿¨Ê§°Ü£¡"; } System.out.println("·µ»ØÖµ"+bb); System.out.println("¿¨ÀàÐÍ"+TagType[0]); System.out.println("¿¨ºÅ"+SNR[0]); return bb; } /**³õʼ»¯¶Ë¿Ú*/ public static void CVR_InitComm() { String as=Dell_adress_and_port.get_adr_port("faka").getBaoliu(); if(as !=null) { int com=Integer.parseInt(as); int a=DLibrary.INSTANCE.CVR_InitComm(com);// ³õʼ»¯Á¬½Ó; if (a != 1) { System.out.println("com"+com+"´ò¿ªÊ§°Ü£¡"); state="com"+com+"´ò¿ªÊ§°Ü£¡Çë¼ì²éÉ豸ռÓö˿ÚÊÇ·ñÕýÈ·»òÕßÉ豸ÊÇ·ñÁ¬½Ó..."; return; }else { state="·¢¿¨É豸׼±¸¾ÍÐ÷..."; } } } /**¿¨ÈÏÖ¤*/ public static boolean CVR_Authenticate(){ System.out.println("¿¨ÈÏÖ¤²Ù×÷£¡"); int ee=DLibrary.INSTANCE.CVR_Authenticate(); if (ee != 1) { renzheng=false; } else { renzheng=true; } return renzheng; } /**¹Ø±ÕÁ¬½Ó*/ public static void close() { int ff=DLibrary.INSTANCE.CVR_CloseComm(); if (ff != 1) { state="¹Ø±ÕÁ¬½Óʧ°Ü"; SendTag.set_state("¹Ø±ÕÁ¬½Óʧ°Ü"); } else { SendTag.set_state("¶¨Î»¿¨¶ÁÈ¡³É¹¦ÇëÈ¡×ß¶¨Î»¿¨..."); } } /**ÉèÖò¨ÌØÂÊ*/ public static void CVR_SetBaudRate() { DLibrary.INSTANCE.CVR_SetBaudRate(9600); } /**¶Á¿¨²Ù×÷*/ public static void CVR_Read_FPContent() { int hh=DLibrary.INSTANCE.CVR_Read_FPContent(); if (hh != 1) { System.out.println("¶Á¿¨²Ù×÷ʧ°Ü"); SendTag.set_state("¶Á¿¨Ê§°Ü..."); } } public static int Read_Content() { int ii=DLibrary.INSTANCE.CVR_Read_Content(1); if (ii != 1) { System.out.println("»ñÈ¡ÐÅϢʧ°Ü"); SendTag.set_state("»ñÈ¡ÐÅϢʧ°Ü..."); } else { System.out.println(getPeopleSex()); System.out.println(getPeopleName()); System.out.println(getMinzu()); System.out.println(getChushengdate()); System.out.println(getAddress()); System.out.println(getIdnum()); System.out.println(getFazhengjiguan()); System.out.println(getStartdate()); System.out.println(getJizhidate()); // getimage(); SendTag.set_state("¶ÁÈ¡"+getPeopleName()+"Éí·ÝÖ¤ÐÅÏ¢³É¹¦£¬ÇëÈ¡×ßÉí·ÝÖ¤..."); } return ii; } /**»ñÈ¡ÐÕÃû*/ @SuppressWarnings("unused") private static String getPeopleName() { try { //³¤¶È¸ü¾ß»ªÊÓÎĵµÉ趨 byte [] nameStrTmp = new byte[30]; //JNAµ÷ÓÃDLL·½·¨ DLibrary.INSTANCE.GetPeopleName(nameStrTmp,len); name=handleResult(nameStrTmp); } catch (Exception e) { e.printStackTrace(); } return name; } /**»ñÈ¡ÐÔ±ð*/ private static String getPeopleSex() { try { byte [] strTmp = new byte[2]; DLibrary.INSTANCE.GetPeopleSex(strTmp,len); sex=handleResult(strTmp); } catch (Exception e) { e.printStackTrace(); } return sex; } /**»ñÈ¡Ãñ×å*/ @SuppressWarnings("unused") private static String getMinzu() { try { byte [] strTmp = new byte[2]; DLibrary.INSTANCE.GetPeopleNation(strTmp,len); minzu=handleResult(strTmp); } catch (Exception e) { e.printStackTrace(); } return minzu; } /**»ñÈ¡³öÉúÈÕÆÚ*/ public static String getChushengdate() { try { byte [] strTmp = new byte[50]; DLibrary.INSTANCE.GetPeopleBirthday(strTmp,len); chushengdate=handleResult(strTmp); } catch (Exception e) { e.printStackTrace(); } return chushengdate; } /**»ñÈ¡µØÖ·*/ public static String getAddress() { try { byte [] strTmp = new byte[100]; DLibrary.INSTANCE.GetPeopleAddress(strTmp,len); address=handleResult(strTmp); } catch (Exception e) { e.printStackTrace(); } return address; } /**»ñÈ¡Éí·ÝÖ¤ºÅ*/ public static String getIdnum() { try { byte [] strTmp = new byte[50]; DLibrary.INSTANCE.GetPeopleIDCode(strTmp,len); idnum=handleResult(strTmp); } catch (Exception e) { e.printStackTrace(); } return idnum; } /**»ñÈ¡·¢Ö¤»ú¹Ø*/ public static String getFazhengjiguan() { try { byte [] strTmp = new byte[50]; DLibrary.INSTANCE.GetDepartment(strTmp,len); fazhengjiguan=handleResult(strTmp); } catch (Exception e) { e.printStackTrace(); } return fazhengjiguan; } /**»ñÈ¡ÓÐЧÈÕÆÚ¿ªÊ¼*/ public static String getStartdate() { try { byte [] strTmp = new byte[50]; DLibrary.INSTANCE.GetStartDate(strTmp,len); startdate=handleResult(strTmp); } catch (Exception e) { e.printStackTrace(); } return startdate; } /**»ñÈ¡ÓÐЧÈÕÆÚ½áÊø*/ public static String getJizhidate() { try { byte [] strTmp = new byte[50]; DLibrary.INSTANCE.GetEndDate(strTmp,len); jizhidate=handleResult(strTmp); } catch (Exception e) { e.printStackTrace(); } return jizhidate; } /**»ñÈ¡ÓÐЧÈÕÆÚ½áÊø*/ public static String getuid() { try { byte [] strTmp = new byte[50]; DLibrary.INSTANCE.CVR_GetIDCardUID(strTmp,10); UID=handleResult(strTmp); } catch (Exception e) { e.printStackTrace(); } return UID; } /**»ñÈ¡Éí·ÝÖ¤ÕÕÆ¬*/ public static void getimage() { try { byte [] strTmp = new byte[50]; DLibrary.INSTANCE.GetBMPData(strTmp,len); } catch (Exception e) { e.printStackTrace(); } } public static void setState(String state) { IDcard.state = state; } public static String handleResult(byte[] nameByte) throws UnsupportedEncodingException { //´¦Àí·µ»ØÖµ·ÀÖ¹ÂÒÂë return new String(nameByte, CHARACTER_ENCODING).trim(); } public static String getState() { return state; } public static void setI(int i) { IDcard.i = i; } }