身份证号正则表达式
在实际开发和业务中,我们常常需要使用正则表达式来对输入的身份证号进行校验。因为身份证号规格化程度高,符合一定的规律,我们可以通过正则表达式来快速判断是否符合身份证号格式的要求。
身份证号规则
身份证号是由18位数字和1位有效数字码组成。其中前17位是地区和出生年月日信息,第18位则是根据前17位采用的GB/T 2260—1999 标准计算出来的校验码,用于校验号码的有效性。
规则如下:
- 前1、2位表示:所在省份的代码;
- 第3、4位表示:所在城市的代码;
- 第5、6位表示:所在区县的代码;
- 第7~14位表示:出生年月日,比如19670401代表1967年4月1日;
- 第15、16位表示:所在地的派出所的代码;
- 第17位表示性别,奇数表示男性,偶数表示女性;
- 第18位为校验码,通过ISO 7064:1983 标准计算得出。
正则表达式检测身份证号格式
正则表达式是处理字符串的强大工具,可以用于校验、匹配、替换等功能。使用正则表达式来校验身份证号格式的优点是可以快速实现身份证号的格式检测,代码简洁易懂。下面是一个示例代码:
# python实现正则表达式检测身份证号格式
import re
def validate_id_number(id_number):
# 定义身份证号正则表达式
pattern = r'^\d{17}[\dXx]$'
# 进行正则表达式匹配
result = re.match(pattern, id_number)
return True if result else False
# 示例测试
id_number = '440524199501010014'
print(validate_id_number(id_number)) #True
id_number = '44052419950101001X'
print(validate_id_number(id_number)) #True
id_number = '44052419950101001Y'
print(validate_id_number(id_number)) #False
// javascript实现正则表达式检测身份证号格式
function validateIdNumber(idNumber) {
// 定义身份证号正则表达式
const pattern = /^\d{17}[\dXx]$/;
// 进行正则表达式匹配
return pattern.test(idNumber);
}
// 示例测试
const idNumber = '440524199501010014';
console.log(validateIdNumber(idNumber)); // true
const invalidIdNumber = '44052419950101001Y';
console.log(validateIdNumber(invalidIdNumber)); // false
校验身份证号有效性
正如身份证号规则所述,身份证号码校验码是前17位数分别乘以对应的系数,再将结果相加。算出的结果再除以11, 记录余数。余数的结果与校验码对应表中的值比对,即可判断身份证号校验码的有效性。
下面是一个python实现身份证号码校验码校验的示例代码:
# python实现校验身份证号有效性
def check_id_number(id_number):
# 定义GB/T 2260—1999规定的验证码
rule = '10X98765432'
# 系数加权因子
factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
# 获取前17位
front_17_digits = id_number[:17]
# 初值设为0,后面用于累加前17位数字和系数的乘积
total = 0
# 依次对前17位数字和系数乘积求和
for i in range(17):
total += int(front_17_digits[i])*factor[i]
# 相加的结果除以11,得到余数
remainder = total % 11
# 根据余数规则,查询校验码对应表中对应位置的值
validation_code = rule[remainder]
# 如果查询得到的校验码与身份证号最后一位相等,则说明校验通过
if validation_code == id_number[-1]:
return True
else:
return False
# 示例测试
id_number = '440524199501010014'
print(check_id_number(id_number)) #True
id_number = '44052419950101001X'
print(check_id_number(id_number)) #True
id_number = '44052419950101001Y'
print(check_id_number(id_number)) #False
结论
身份证号正则表达式的规则和校验方法较为固定,我们可以通过正则表达式实现快速校验身份证号格式,通过算法判断校验码的有效性。在实际应用中,可以根据实际需要对正则表达式进行优化和改进,达到更高效、灵活的效果。