- 正整数:^[1-9]\d*$
- 手机号:^(1[3-9])\d{9}$ (号码段更新太快不做太具体的验证)
- 身份证:^[1-9]\d{9}(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}(\d|[xX])$
身份证加地区和校验位的校验,Java代码为例:
/**
* 身份证地区、校验位校验
* @param idCard 已经过正则验证的身份证号
* @return
*/
public static boolean validateIDNo(String idCard) {
List<String> provinceCode = Arrays.asList("11", "12", "13", "14", "15", "21", "22", "23", "31", "32", "33", "34", "35", "36", "37", "41", "42", "43", "44", "45", "46", "50", "51", "52", "53", "54", "61", "62", "63", "64", "65", "71", "81", "82", "91");
Integer[] factor = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
String[] end_num = {"1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"};
if (!provinceCode.contains(idCard.substring(0, 2))) {
return false;
}
char[] idCards = idCard.toCharArray();
int sum = 0;
for (int i = 0; i < idCards.length - 1; i++) {
sum += Integer.parseInt(String.valueOf(idCards[i])) * factor[i];
}
int idCardMod = sum % 11;
if (!end_num[idCardMod].toUpperCase().equals(idCard.substring(17).toUpperCase())) {
return false;
}
return true;
}