ChaSfz java身份证验证

java身份证验证

更新时间:2010/7/14 8:54:03

也是在网上找的一个方法,放到这里备用,嘿嘿

/***********************************身份证验证开始****************************************//***身份证号码验证*
1、号码的结构*公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,*八位数字出生日期码,三位数字顺序码和一位数字校验码。
2、地址码(前六位数)*表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按GB/T2260的规定执行。
3、出生日期码(第七位至十四位)*表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。
4、顺序码(第十五位至十七位)*表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,*顺序码的奇数分配给男性,偶数分配给女性。
5、校验码(第十八位数)*(1)十七位数字本体码加权求和公式S=Sum(Ai*Wi),i=0,...,16,先对前17位数字的权求和*Ai:表示第i位置上的身份证号码数字值Wi:表示第i位置上的加权因子Wi:791058421637910584*2(2)计算模Y=mod(S,11)(3)通过模得到对应的校验码Y:012345678910校验码:10*X98765432*//***功能:身份证的有效验证*@paramIDStr身份证号*@return有效:返回""无效:返回String信息*@throwsParseException*/@SuppressWarnings("unchecked")publicstaticStringIDCardValidate(StringIDStr)throwsParseException{StringerrorInfo="";//记录错误信息String[]ValCodeArr={"1","0","x","9","8","7","6","5","4","3","2"};String[]Wi={"7","9","10","5","8","4","2","1","6","3","7","9","10","5","8","4","2"};StringAi="";//================号码的长度15位或18位================if(IDStr.length()!=15IDStr.length()!=18){errorInfo="身份证号码长度应该为15位或18位。";returnerrorInfo;}//=======================(end)========================//================数字除最后以为都为数字================if(IDStr.length()==18){Ai=IDStr.substring(0,17);}elseif(IDStr.length()==15){Ai=IDStr.substring(0,6)+"19"+IDStr.substring(6,15);}if(isNumeric(Ai)==false){errorInfo="身份证15位号码都应为数字;18位号码除最后一位外,都应为数字。";returnerrorInfo;}//=======================(end)========================//================出生年月是否有效================StringstrYear=Ai.substring(6,10);//年份StringstrMonth=Ai.substring(10,12);//月份StringstrDay=Ai.substring(12,14);//月份if(isDate(strYear+"-"+strMonth+"-"+strDay)==false){errorInfo="身份证生日无效。";returnerrorInfo;}GregorianCalendargc=newGregorianCalendar();SimpleDateFormats=newSimpleDateFormat("yyyy-MM-dd");if((gc.get(Calendar.YEAR)-Integer.parseInt(strYear))150||(gc.getTime().getTime()-s.parse(strYear+"-"+strMonth+"-"+strDay).getTime())0){errorInfo="身份证生日不在有效范围。";returnerrorInfo;}if(Integer.parseInt(strMonth)12||Integer.parseInt(strMonth)==0){errorInfo="身份证月份无效";returnerrorInfo;}if(Integer.parseInt(strDay)31||Integer.parseInt(strDay)==0){errorInfo="身份证日期无效";returnerrorInfo;}//=====================(end)=====================//================地区码时候有效================Hashtableh=GetAreaCode();if(h.get(Ai.substring(0,2))==null){errorInfo="身份证地区编码错误。";returnerrorInfo;}//==============================================//================判断最后一位的值================intTotalmulAiWi=0;for(inti=0;i17;i++){TotalmulAiWi=TotalmulAiWi+Integer.parseInt(String.valueOf(Ai.charAt(i)))*Integer.parseInt(Wi[i]);}intmodValue=TotalmulAiWi%11;StringstrVerifyCode=ValCodeArr[modValue];Ai=Ai+strVerifyCode;if(IDStr.length()==18){if(Ai.equals(IDStr)==false){errorInfo="身份证无效,不是合法的身份证号码";returnerrorInfo;}}else{return"";}//=====================(end)=====================return"";}/***功能:设置地区编码*@returnHashtable对象*/@SuppressWarnings("unchecked")privatestaticHashtableGetAreaCode(){Hashtablehashtable=newHashtable();hashtable.put("11","北京");hashtable.put("12","天津");hashtable.put("13","河北");hashtable.put("14","山西");hashtable.put("15","内蒙古");hashtable.put("21","辽宁");hashtable.put("22","吉林");hashtable.put("23","黑龙江");hashtable.put("31","上海");hashtable.put("32","江苏");hashtable.put("33","浙江");hashtable.put("34","安徽");hashtable.put("35","福建");hashtable.put("36","江西");hashtable.put("37","山东");hashtable.put("41","河南");hashtable.put("42","湖北");hashtable.put("43","湖南");hashtable.put("44","广东");hashtable.put("45","广西");hashtable.put("46","海南");hashtable.put("50","重庆");hashtable.put("51","四川");hashtable.put("52","贵州");hashtable.put("53","云南");hashtable.put("54","西藏");hashtable.put("61","陕西");hashtable.put("62","甘肃");hashtable.put("63","青海");hashtable.put("64","宁夏");hashtable.put("65","新疆");hashtable.put("71","台湾");hashtable.put("81","香港");hashtable.put("82","澳门");hashtable.put("91","国外");returnhashtable;}/***功能:判断字符串是否为数字*@paramstr*@return*/privatestaticbooleanisNumeric(Stringstr){Patternpattern=Pattern.compile("[0-9]*");MatcherisNum=pattern.matcher(str);if(isNum.matches()){returntrue;}else{returnfalse;}}/***功能:判断字符串是否为日期格式*@paramstr*@return*/publicstaticbooleanisDate(StringstrDate){Patternpattern=Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");Matcherm=pattern.matcher(strDate);if(m.matches()){returntrue;}else{returnfalse;}}/***@paramargs*@throwsParseException*///publicstaticvoidmain(String[]args)throwsParseException{////StringIDCardNum="210102820826411";////StringIDCardNum="210102198208264114";//StringIDCardNum="500113198606245216";//CommonUtilcc=newCommonUtil();//System.out.println(cc.IDCardValidate(IDCardNum));////System.out.println(cc.isDate("1996-02-29"));//}***********************************身份证验证结束***************/

关于“java身份证验证”的相关问答集锦

以下是与 身份证 java 验证 相关的几篇文章,希望对您有所帮助:

用JAVA实现身份证联网核查接口(XML解析,MQ通信,T

他们也在玩的应用用JAVA实现身份证联网核查接口(XML解析,MQ通信,TCP转发)用JAVA实现了XML解析,MQ通信,TCP转发.程序灵活简单.以下为服务主程序源码.......

验证身份证的真假怎么验证呢?

核查人返回比对结果,提示比对是否一致。 为防止不法分子伪造身份证照片,查询结果还将返回该身份证拥有者的真实照片。 查询一次收费5元 身份信息核查服务收费标准为5元/人次,但发送短信和手机上网等电信资费需按照具体业务价格另外支付。使用手机查询身份证真伪的资费标准已经通过国家发改委、财政部批准。 据警方统计,90%以上的预谋诈骗犯罪分子都会使用假身份证件,而社会上也有一部分人出于不正当的目的,刻意隐瞒自己真实的身份信息,新开通的身份证核查方式将能更好地预防不法分子的一些行为。 据调查,各......

中华人民共和国身份证验证规则

上一篇:excel中新版身份证号重复查询及批量给数据加单引号
下一篇:哪位高手帮忙做个批量验证身份证号和批量身份证升位的软件?

相关内容