您的位置:首页 > 编程语言 > Java开发

java实现验证身份证号是否合法

2017-12-17 18:02 633 查看
输入18位的身份证号码,要求首先验证身份证号码合法性(仅利用校验位验证),如果合法则输出性别和出生日期。说明:

(1)身份证号码的7~12位表示出生年月;第17位表示性别,奇数为男,偶数为女;最后一位为校验位

(2)校验算法:将前面的身份证号码17位数加权求和(系数分别7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2),然后除以11,根据余数找到对应的校验位(分别为1、0、X 、9、8、7、6、5、4、3、2),如果计算的校验位和输入的校验位一致说明身份证号码合法。比如身份证号码53010219200508011x,前17位加权求和:

(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2=189

189%11 = 2

序号为2的校验位就是X,所以身份证号码合法。

package zt_text_id;
import java.util.Scanner;

public class zt_text_idmain {
public static void main(String[] args) {
System.out.println("请输入你的身份证号:");
Scanner scan = new Scanner(System.in);
String iden = scan.next();
idCard id = new idCard(iden);
System.out.println("你的身份证号"+(id.isLegal()==1?"合法":"不合法"));
if (id.isLegal()==1){
System.out.println("你的出生年月是:"+id.year());
System.out.println("性别:"+(id.sex()==1?"男":"女"));
}
}
}


package zt_text_id;

public class idCard {
private String id;
private static final byte MALE = 1;
private static final byte FAMALE = 0;
/**
* 构造函数初始化
* @param id
*/
public idCard(String id){
this.id = id;
}

/**
* 检验身份证是否合法
* @return 1-合法;0-不合法
*/
public int isLegal(){
int a = 0;
int sum = 0;
char checkBit[]={'1','0','X','9','8','7','6','5','4','3','2'};
int []add={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char []stringArr = id.toCharArray();
for (int i=0;i<17;i++){
sum +=add[i]*(stringArr[i]-'0');
}
if (stringArr[17]==checkBit[sum%11]){
a=1;
}
return a;
}

/**
* 判断性别
* @return 1-男;0-女;-1-错误;
*/
public byte sex(){

if (isLegal()==1){
char []stringArr = id.toCharArray();
if (stringArr[17]%2==0){
return MALE;
}else{
return FAMALE;
}
}
return -1;
}

/**
* 输出年月日
* @return 年月日的字符串比如:20171207
*/
public String year(){
String num=null;
if (isLegal()==1){
num = id.substring(6,14);
}
return num;
}
}


总结:编程主要的还是思路,思路清晰了写代码就容易,就比如本题,我们拿到的时候首先想输入一个身份证号,然后就要判断身份证号是否合法,等合法了我们才可以进行下一步。这样的话我们就需要一个判断身份证号是否合法的方法。当判断合法之后,我们就可以输出年月和性别了。输出年月和性别可以分别设置方法进行判断。

当然这里面存在一些bug,比如输入19个的身份证号,前18位正确,多数了一个数也会被认为正确的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: