/**
*(1)前1、2位数字表示:所在省份的代码;
*(2)第3、4位数字表示:所在城市的代码;
*(3)第5、6位数字表示:所在区县的代码;
*(4)第7~14位数字表示:出生年、月、日;
*(5)第15、16位数字表示:户口所在地派出所的代表号码;
*(6)第17位数字表示性别:奇数表示男性,偶数表示女性;
*(7)第18位数字是校检码:代表个人信息,是根据前十七位数字计算出来的
*/
public boolean checkIDCard(String input){
if(checkArea(input) && checkBirthday(input) && verification(input) )
return true ;
return false ;
}
/**
* 检查身份证的地区编号是否对应,这里需要收集各个省的代码,省下面的城市的代码
* @param 身份证号的String
* @return 是否对应
*/
public boolean checkArea(String input){
return true ;
}
/**
* 检查出生日期是否符合
* @param 身份证号的String
* @return 是否符合格式
*/
public boolean checkBirthday(String input){
return true ;
}
/**
* 校验身份证号码是否符合标准,这是一个校验标准。
* 标准:ISO 7064:1983.MOD 11-2
* @param 身份证号的String
* @return 是否符合标准
*/
public boolean verification(String input){
byte[] ids = input.getBytes() ;
int [] weight = {1 ,2 ,4 ,8 ,5 ,10 ,9 ,7 ,3 ,6 ,1 ,2 ,4 ,8 ,5 ,10 ,9 ,7} ;
int total = 0 ;
for(int i = 0 ;i < ids.length ;i++){
total += weight[i] * ids[i] ;
}
int lastNum = total % 11 ;
byte[] dictionary = {'1','0' ,'X' ,'9' ,'8' ,'7' ,'6' ,'5' ,'4' ,'3' ,'2'} ;
return dictionary[lastNum] == ids[17] ? true : false ;
}
身份证分解验证
最新推荐文章于 2018-11-30 16:30:00 发布