/**
* 功能:身份证的有效验证
* @author
* @param num 身份证号
* @return 有效:返回true; 无效:false.
*
*/
public static boolean idCardValidate(String num) {
String[] ValCodeArr = { "1", "0", "x", "9", "8", "7", "6", "5", "4", "3", "2" };
String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7", "9", "10", "5", "8", "4", "2" };
String Ai = "";
// 号码的长度 15位或18位
if (() != 15 && () != 18) {
return false;
}
// 数字 除最后一位都为数字
if (() == 18) {
Ai = (0, 17);
} else if (() == 15) {
Ai = (0, 6) + "19" + (6, 15);
}
// 身份证15位号码都应为数字 ; 18位号码除最后一位外,都应为数字。
if (!isNumeric(Ai)) {
return false;
}
// 出生年月是否有效
String strYear = (6, 10);// 年份
String strMonth = (10, 12);// 月份
String strDay = (12, 14);// 日
// 身份证生日是否有效
if (!isDate(strYear + "-" + strMonth + "-" + strDay)) {
return false;
}
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
try {
if ((() - (strYear)) > 150
|| (().getTime() - (strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {
//身份证生日不在有效范围。
return false;
}
} catch (NumberFormatException e) {
();
} catch ( e) {
();
}
if ((strMonth) > 12 || (strMonth) == 0) {
// 身份证月份无效
return false;
}
if ((strDay) > 31 || (strDay) == 0) {
// 身份证日期无效
return false;
}
// 判断最后一位的值
int TotalmulAiWi = 0;
for (int i = 0; i < 17; i++) {
TotalmulAiWi = TotalmulAiWi + (((i))) * (Wi[i]);
}
int modValue = TotalmulAiWi % 11;
String strVerifyCode = ValCodeArr[modValue];
Ai = Ai + strVerifyCode;
if (() == 18) {
if (!(num)) {
// 身份证无效,不是合法的身份证号码
return false;
} else {
return true;
}
}
return true;
}
/**
* 功能:判断字符串是否为数字
*
* @param str
* @return
*/
private static boolean isNumeric(String str) {
Pattern pattern = ("[0-9]*");
Matcher isNum = (str);
if (()) {
return true;
} else {
return false;
}
}
/**
* 功能:判断字符串是否为日期格式
*
* @param str
* @return
*/
private static boolean isDate(String strDate) {
Pattern pattern = Pattern
.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");
Matcher m = (strDate);
if (()) {
return true;
} else {
return false;
}
}