身份验证-正则表达式(JAVA)
2014-07-09 17:37
344 查看
/**
* 功能:身份证的有效验证
* @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 (num.length() != 15 && num.length() != 18) {
return false;
}
// 数字 除最后一位都为数字
if (num.length() == 18) {
Ai = num.substring(0, 17);
} else if (num.length() == 15) {
Ai = num.substring(0, 6) + "19" + num.substring(6, 15);
}
// 身份证15位号码都应为数字 ; 18位号码除最后一位外,都应为数字。
if (!isNumeric(Ai)) {
return false;
}
// 出生年月是否有效
String strYear = Ai.substring(6, 10);// 年份
String strMonth = Ai.substring(10, 12);// 月份
String strDay = Ai.substring(12, 14);// 日
// 身份证生日是否有效
if (!isDate(strYear + "-" + strMonth + "-" + strDay)) {
return false;
}
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
try {
if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150
|| (gc.getTime().getTime() - s.parse(strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {
//身份证生日不在有效范围。
return false;
}
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (java.text.ParseException e) {
e.printStackTrace();
}
if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {
// 身份证月份无效
return false;
}
if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {
// 身份证日期无效
return false;
}
// 判断最后一位的值
int TotalmulAiWi = 0;
for (int i = 0; i < 17; i++) {
TotalmulAiWi = TotalmulAiWi + Integer.parseInt(String.valueOf(Ai.charAt(i))) * Integer.parseInt(Wi[i]);
}
int modValue = TotalmulAiWi % 11;
String strVerifyCode = ValCodeArr[modValue];
Ai = Ai + strVerifyCode;
if (num.length() == 18) {
if (!Ai.equals(num)) {
// 身份证无效,不是合法的身份证号码
return false;
} else {
return true;
}
}
return true;
}
/**
* 功能:判断字符串是否为数字
*
* @param str
* @return
*/
private static boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if (isNum.matches()) {
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 = pattern.matcher(strDate);
if (m.matches()) {
return true;
} else {
return false;
}
}
* 功能:身份证的有效验证
* @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 (num.length() != 15 && num.length() != 18) {
return false;
}
// 数字 除最后一位都为数字
if (num.length() == 18) {
Ai = num.substring(0, 17);
} else if (num.length() == 15) {
Ai = num.substring(0, 6) + "19" + num.substring(6, 15);
}
// 身份证15位号码都应为数字 ; 18位号码除最后一位外,都应为数字。
if (!isNumeric(Ai)) {
return false;
}
// 出生年月是否有效
String strYear = Ai.substring(6, 10);// 年份
String strMonth = Ai.substring(10, 12);// 月份
String strDay = Ai.substring(12, 14);// 日
// 身份证生日是否有效
if (!isDate(strYear + "-" + strMonth + "-" + strDay)) {
return false;
}
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
try {
if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) > 150
|| (gc.getTime().getTime() - s.parse(strYear + "-" + strMonth + "-" + strDay).getTime()) < 0) {
//身份证生日不在有效范围。
return false;
}
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (java.text.ParseException e) {
e.printStackTrace();
}
if (Integer.parseInt(strMonth) > 12 || Integer.parseInt(strMonth) == 0) {
// 身份证月份无效
return false;
}
if (Integer.parseInt(strDay) > 31 || Integer.parseInt(strDay) == 0) {
// 身份证日期无效
return false;
}
// 判断最后一位的值
int TotalmulAiWi = 0;
for (int i = 0; i < 17; i++) {
TotalmulAiWi = TotalmulAiWi + Integer.parseInt(String.valueOf(Ai.charAt(i))) * Integer.parseInt(Wi[i]);
}
int modValue = TotalmulAiWi % 11;
String strVerifyCode = ValCodeArr[modValue];
Ai = Ai + strVerifyCode;
if (num.length() == 18) {
if (!Ai.equals(num)) {
// 身份证无效,不是合法的身份证号码
return false;
} else {
return true;
}
}
return true;
}
/**
* 功能:判断字符串是否为数字
*
* @param str
* @return
*/
private static boolean isNumeric(String str) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher isNum = pattern.matcher(str);
if (isNum.matches()) {
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 = pattern.matcher(strDate);
if (m.matches()) {
return true;
} else {
return false;
}
}
相关文章推荐
- JAVA日期验证 正则表达式,包括润二月
- Java中正则表达式验证日期格式
- [转]java正则表达式验证手机号码ip,邮箱
- java关于正则表达式验证邮箱
- JAVA日期验证 正则表达式,包括润二月(转)
- JAVA正则表达式数字验证
- java正则表达式验证邮箱、IP地址、手机号码
- java正则表达式验证整数、浮点数和日期
- java中正则表达式验证日期
- JAVA日期验证 正则表达式,包括润二月
- JAVA正则表达式数字验证
- JAVA日期验证 正则表达式,包括润二月(转)
- java正则表达式验证手机号码ip,邮箱
- 正则表达式 - java验证IP地址 - java验证日期时间,解决润月 - java验证邮箱格式
- 关于Java的一点正则表达式来验证E-mail是否正确
- java 验证电子邮件 java利用正则表达式验证电子邮件 java 验证Email
- 身份验证常用正则表达式
- 【转】java类中的数据验证(正则表达式)
- 身份验证常用正则表达式
- Java常用的正则表达式验证