package com.citigroup.ap.rebt.validateion.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IdCardValidate {
public static void vlidateIdCard(String idCard) {
if (idCard.length() == 18) {
String checkCode = idCard.substring(17, 18);
if (validateNewRegEx(idCard)) {
if (checkCode(idCard).equals(checkCode)) {
System.out.println("身份证号码正确");
} else {
System.out.println("校验码错误");
}
} else {
System.out.println("身份证号码有误");
}
}
else if (idCard.length() == 15) {
if (validateOldRegEx(idCard)) {
System.out.println("身份证号码正确");
} else {
System.out.println("身份证号码有误");
}
} else {
System.out.println("身份证号码长度有误");
}
}
public static boolean validateNewRegEx(String idCard) {
String regEx = "^[1-6]\\d{5}[1-2]\\d{3}((0\\d)|1[0-2])(([0-2]\\d)|(3[0-1]))\\d{3}([0-9]|X)$";
Pattern pat = Pattern.compile(regEx);
Matcher mat = pat.matcher(idCard);
return mat.find();
}
public static boolean validateOldRegEx(String idCard) {
String regEx = "^[1-6]\\d{5}\\d{2}((0\\d)|1[0-2])(([0-2]\\d)|(3[0-1]))\\d{3}$";
Pattern pat = Pattern.compile(regEx);
Matcher mat = pat.matcher(idCard);
return mat.find();
}
public static String checkCode(String idCard) {
int w[] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
int sum = 0;
int number = 0;
String num = null;
for (int i = 0; i < 17; i++) {
String s = idCard.substring(0, 1);
sum += Integer.parseInt(s) * w[i];
idCard = idCard.substring(1, idCard.length());
}
number = sum % 11;
switch (number) {
case 0:
num = "1";
break;
case 1:
num = "0";
break;
case 2:
num = "X";
break;
case 3:
num = "9";
break;
case 4:
num = "8";
break;
case 5:
num = "7";
break;
case 6:
num = "6";
break;
case 7:
num = "5";
break;
case 8:
num = "4";
break;
case 9:
num = "3";
break;
case 10:
num = "2";
break;
}
return num;
}
}