身份证号码的正则表达式可以区分出18位和15位身份证号码,如下所示:
18位身份证号码格式:前6位为地址码,7到14位为出生日期码,15到17位为顺序码,18位为校验码。
```
^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$
```
15位身份证号码格式:前6位为地址码,7到12位为出生日期码,13到15位为顺序码。
```
^[1-9]\d{5}\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{2}$
```
注意:以上正则表达式只能验证身份证的格式是否正确,并不能保证身份证号码的真实性。身份证号码的校验规则在不同国家和地区可能存在差异,建议在具体使用中再做进一步验证。
以下是一个校验身份证号码的JavaScript函数:
function validateIdNumber(idNumber) {
// 18位身份证号码的正则表达式
var regExp18 = /^[1-9]\d{5}(19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
// 15位身份证号码的正则表达式
var regExp15 = /^[1-9]\d{5}\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{2}$/;
// 如果身份证号码符合18位或15位的正则表达式,则进行校验
if (regExp18.test(idNumber) || regExp15.test(idNumber)) {
// 校验身份证号码的校验码是否正确
if (idNumber.length == 18) {
var sum = 0;
var coefficient = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var parityCode = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];
for (var i = 0; i < 17; i++) {
sum += parseInt(idNumber.charAt(i)) * coefficient[i];
}
var mod = sum % 11;
if (parityCode[mod] !== idNumber.charAt(17).toUpperCase()) {
// 身份证号码校验码不正确,返回false
return false;
}
}
// 身份证号码校验通过,返回true
return true;
} else {
// 身份证号码格式不正确,返回false
return false;
}
}