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;i57){
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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。