Android身份证号有效性校验工具类案例
不记得从哪找的了,修改了部分代码,修复在Android平台下使用时,时区时间格式异常的问题。
packagecn.aikongmeng.demo.utils; importjava.text.NumberFormat; importjava.text.SimpleDateFormat; importjava.util.Date; importjava.util.Random; /** *CreatedbyArjunon2017/4/25. *身份证有效性校验 */ publicclassIdentityUtils{ //位权值数组 privatestaticbyte[]Wi=newbyte[17]; //身份证前部分字符数 privatestaticfinalbytefPart=6; //身份证算法求模关键值 privatestaticfinalbytefMod=11; //旧身份证长度 privatestaticfinalbyteoldIDLen=15; //新身份证长度 privatestaticfinalbytenewIDLen=18; //新身份证年份标志 privatestaticfinalStringyearFlag="19"; //校验码串 privatestaticfinalStringCheckCode="10X98765432"; //最小的行政区划码 privatestaticfinalintminCode=150000; //最大的行政区划码 privatestaticfinalintmaxCode=700000; //旧身份证号码 //privateStringoldIDCard=""; //新身份证号码 //privateStringnewIDCard=""; //地区及编码 //privateStringArea[][2]= privatestaticvoidsetWiBuffer(){ for(inti=0;i补充知识:Android【身份证校验方法】已封装可以直接调用可用
做项目的时候,有需要对用户进行身份证进行校验,苦于单独写一个比较麻烦,于是找度娘协助,试了几个方法这个方法比较全面一些,比较实用。
记录下这个,也感谢原作者,只是现在忘了在哪复制了
importandroid.text.TextUtils; /** *身份证的工具类 */ publicclassIdCardUtil{ privateStringidCardNum=null; privatestaticintIS_EMPTY=1; privatestaticintLEN_ERROR=2; privatestaticintCHAR_ERROR=3; privatestaticintDATE_ERROR=4; privatestaticintCHECK_BIT_ERROR=5; privateString[]errMsg=newString[]{"身份证完全正确!", "身份证为空!", "身份证长度不正确!", "身份证有非法字符!", "身份证中出生日期不合法!", "身份证校验位错误!"}; privateinterror=0; /** *构造方法。 * *@paramidCardNum */ publicIdCardUtil(StringidCardNum){ //super(); this.idCardNum=idCardNum.trim(); if(!TextUtils.isEmpty(this.idCardNum)){ this.idCardNum=this.idCardNum.replace("x","X"); } } publicStringgetIdCardNum(){ returnidCardNum; } publicvoidsetIdCardNum(StringidCardNum){ this.idCardNum=idCardNum; if(!TextUtils.isEmpty(this.idCardNum)){ this.idCardNum=this.idCardNum.replace("x","X"); } } /** *得到身份证详细错误信息。 * *@return错误信息。 */ publicStringgetErrMsg(){ returnthis.errMsg[this.error]; } /** *是否为空。 * *@returntrue:nullfalse:notnull; */ publicbooleanisEmpty(){ if(this.idCardNum==null) returntrue; else returnthis.idCardNum.trim().length()>0?false:true; } /** *身份证长度。 * *@return */ publicintgetLength(){ returnthis.isEmpty()?0:this.idCardNum.length(); } /** *身份证长度。 * *@return */ publicintgetLength(Stringstr){ returnthis.isEmpty()?0:str.length(); } /** *是否是15位身份证。 * *@returntrue:15位false:其他。 */ publicbooleanis15(){ returnthis.getLength()==15; } /** *是否是18位身份证。 * *@returntrue:18位false:其他。 */ publicbooleanis18(){ returnthis.getLength()==18; } /** *得到身份证的省份代码。 * *@return省份代码。 */ publicStringgetProvince(){ returnthis.isCorrect()==0?this.idCardNum.substring(0,2):""; } /** *得到身份证的城市代码。 * *@return城市代码。 */ publicStringgetCity(){ returnthis.isCorrect()==0?this.idCardNum.substring(2,4):""; } /** *得到身份证的区县代码。 * *@return区县代码。 */ publicStringgetCountry(){ returnthis.isCorrect()==0?this.idCardNum.substring(4,6):""; } /** *得到身份证的出生年份。 * *@return出生年份。 */ publicStringgetYear(){ if(this.isCorrect()!=0) return""; if(this.getLength()==15){ return"19"+this.idCardNum.substring(6,8); }else{ returnthis.idCardNum.substring(6,10); } } /** *得到身份证的出生月份。 * *@return出生月份。 */ publicStringgetMonth(){ if(this.isCorrect()!=0) return""; if(this.getLength()==15){ returnthis.idCardNum.substring(8,10); }else{ returnthis.idCardNum.substring(10,12); } } /** *得到身份证的出生日子。 * *@return出生日期。 */ publicStringgetDay(){ if(this.isCorrect()!=0) return""; if(this.getLength()==15){ returnthis.idCardNum.substring(10,12); }else{ returnthis.idCardNum.substring(12,14); } } /** *得到身份证的出生日期。 * *@return出生日期。 */ publicStringgetBirthday(){ if(this.isCorrect()!=0) return""; if(this.getLength()==15){ return"19"+this.idCardNum.substring(6,12); }else{ returnthis.idCardNum.substring(6,14); } } /** *得到身份证的出生年月。 * *@return出生年月。 */ publicStringgetBirthMonth(){ returngetBirthday().substring(0,6); } /** *得到身份证的顺序号。 * *@return顺序号。 */ publicStringgetOrder(){ if(this.isCorrect()!=0) return""; if(this.getLength()==15){ returnthis.idCardNum.substring(12,15); }else{ returnthis.idCardNum.substring(14,17); } } /** *得到性别。 * *@return性别:1-男2-女 */ publicStringgetSex(){ if(this.isCorrect()!=0) return""; intp=Integer.parseInt(getOrder()); if(p%2==1){ return"男"; }else{ return"女"; } } /** *得到性别值。 * *@return性别:1-男2-女 */ publicStringgetSexValue(){ if(this.isCorrect()!=0) return""; intp=Integer.parseInt(getOrder()); if(p%2==1){ return"1"; }else{ return"2"; } } /** *得到校验位。 * *@return校验位。 */ publicStringgetCheck(){ if(!this.isLenCorrect()) return""; StringlastStr=this.idCardNum.substring(this.idCardNum.length()-1); if("x".equals(lastStr)){ lastStr="X"; } returnlastStr; } /** *得到15位身份证。 * *@return15位身份证。 */ publicStringto15(){ if(this.isCorrect()!=0) return""; if(this.is15()) returnthis.idCardNum; else returnthis.idCardNum.substring(0,6)+this.idCardNum.substring(8,17); } /** *得到18位身份证。 * *@return18位身份证。 */ publicStringto18(){ if(this.isCorrect()!=0) return""; if(this.is18()) returnthis.idCardNum; else returnthis.idCardNum.substring(0,6)+"19"+this.idCardNum.substring(6)+this.getCheckBit(); } /** *得到18位身份证。 * *@return18位身份证。 */ publicstaticStringtoNewIdCard(StringtempStr){ if(tempStr.length()==18) returntempStr.substring(0,6)+tempStr.substring(8,17); else returntempStr.substring(0,6)+"19"+tempStr.substring(6)+getCheckBit(tempStr); } /** *校验身份证是否正确 * *@return0:正确 */ publicintisCorrect(){ if(this.isEmpty()){ this.error=IdCardUtil.IS_EMPTY; returnthis.error; } if(!this.isLenCorrect()){ this.error=IdCardUtil.LEN_ERROR; returnthis.error; } if(!this.isCharCorrect()){ this.error=IdCardUtil.CHAR_ERROR; returnthis.error; } if(!this.isDateCorrect()){ this.error=IdCardUtil.DATE_ERROR; returnthis.error; } if(this.is18()){ if(!this.getCheck().equals(this.getCheckBit())){ this.error=IdCardUtil.CHECK_BIT_ERROR; returnthis.error; } } return0; } privatebooleanisLenCorrect(){ returnthis.is15()||this.is18(); } /** *判断身份证中出生日期是否正确。 * *@return */ privatebooleanisDateCorrect(){ /*非闰年天数*/ int[]monthDayN={31,28,31,30,31,30,31,31,30,31,30,31}; /*闰年天数*/ int[]monthDayL={31,29,31,30,31,30,31,31,30,31,30,31}; intmonth; if(this.is15()){ month=Integer.parseInt(this.idCardNum.substring(8,10)); }else{ month=Integer.parseInt(this.idCardNum.substring(10,12)); } intday; if(this.is15()){ day=Integer.parseInt(this.idCardNum.substring(10,12)); }else{ day=Integer.parseInt(this.idCardNum.substring(12,14)); } if(month>12||month<=0){ returnfalse; } if(this.isLeapyear()){ if(day>monthDayL[month-1]||day<=0) returnfalse; }else{ if(day>monthDayN[month-1]||day<=0) returnfalse; } returntrue; } /** *得到校验位。 * *@return */ privateStringgetCheckBit(){ if(!this.isLenCorrect()) return""; Stringtemp=null; if(this.is18()) temp=this.idCardNum; else temp=this.idCardNum.substring(0,6)+"19"+this.idCardNum.substring(6); StringcheckTable[]=newString[]{"1","0","X","9","8","7","6","5","4","3","2"}; int[]wi=newint[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1}; intsum=0; for(inti=0;i<17;i++){ Stringch=temp.substring(i,i+1); sum=sum+Integer.parseInt(ch)*wi[i]; } inty=sum%11; returncheckTable[y]; } /** *得到校验位。 * *@return */ privatestaticStringgetCheckBit(Stringstr){ Stringtemp=null; if(str.length()==18) temp=str; else temp=str.substring(0,6)+"19"+str.substring(6); StringcheckTable[]=newString[]{"1","0","X","9","8","7","6","5","4","3","2"}; int[]wi=newint[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1}; intsum=0; for(inti=0;i<17;i++){ Stringch=temp.substring(i,i+1); sum=sum+Integer.parseInt(ch)*wi[i]; } inty=sum%11; returncheckTable[y]; } /** *身份证号码中是否存在非法字符。 * *@returntrue:正确false:存在非法字符。 */ privatebooleanisCharCorrect(){ booleaniRet=true; if(this.isLenCorrect()){ byte[]temp=this.idCardNum.getBytes(); if(this.is15()){ for(inti=0;i57){ iRet=false; break; } } } if(this.is18()){ for(inti=0;i 57){ if(i==17&&temp[i]!=88){ iRet=false; break; } } } } }else{ iRet=false; } returniRet; } /** *判断身份证的出生年份是否未闰年。 * *@returntrue:闰年false平年 */ privatebooleanisLeapyear(){ Stringtemp; if(this.is15()){ temp="19"+this.idCardNum.substring(6,8); }else{ temp=this.idCardNum.substring(6,10); } intyear=Integer.parseInt(temp); if((year%4==0&&year%100!=0)||year%400==0) returntrue; else returnfalse; } } 重要的是这个方法可以验证"X","x"。
以上这篇Android身份证号有效性校验工具类案例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。