您的位置:首页 > 其它

验证身份证是否合法算法

2015-08-30 10:37 281 查看
可以通过输入身份证的前17位,然后算出18位,与输入的第18位进行校验,判断输入的是否是合法的身份证“

package com.edaixi.testjava;

import java.math.MathContext;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class TestJavaTool {

private final static int[] FACTOR = new int[]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};

/**
* 计算前17位身份证号乘以系数后的总和
* @param id17    前17位身份证号
* @return
*/
private static int sumFactor(String id17) {
if(id17==null || id17.trim().equals("")) {
return -1; //输入的身份证为空
}
int len = id17.length();
if(len!=17) {
return -3; //输入的身份证号码不为17位
}
int sum = 0;
for(int i=0; i<len; i++) {
sum += FACTOR[i] * Integer.parseInt(String.valueOf(id17.charAt(i)));
}
return sum;
}

/**
* 根据前17位身份证号,算出第18位的数字
* @param id17
* @return
*/
public static String getLastNumOfID(String id17) {
int sum = sumFactor(id17);
String res = "";
if(sum==-1) {
return "输入的身份证为空";
}else if(sum==-3) {
return "输入的身份证号码不为17位";
}else {
int mod = sum % 11;
switch(mod) {
case 0:
res = "1";
break;
case 1:
res = "0";
break;
case 2:
res = "X";
break;
case 3:
res = "9";
break;
case 4:
res = "8";
break;
case 5:
res = "7";
break;
case 6:
res = "6";
break;
case 7:
res = "5";
break;
case 8:
res = "4";
break;
case 9:
res = "3";
break;
case 10:
res = "2";
break;
default:
break;
}
}
return res;
}

/**
* 判断输入的身份证是否合法
* @param idNum 18位的身份证号
* @return
*/
public static boolean isCorrectID(String idNum) {
boolean flag = false;
if(idNum==null || idNum.trim().length()!=18) {
return flag;
}
String last = getLastNumOfID(idNum.substring(0, idNum.length()-1));
if(last.equals(String.valueOf(idNum.charAt(idNum.length()-1)))) {
flag = true;
}
return flag;
}

public static void main(String[] args) {
System.out.println("身份证最后一位是:"+getLastNumOfID("41270219910105361"));
System.out.println("身份证是否合法:"+isCorrectID("41270219910105361"));

}
}


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: