身份证是公民身份识别的重要证件,验证身份证的合法性对于各种应用场景都至关重要。本文将使用Python语言编写一个身份证验证程序。
一、获取身份证号码
在实际应用中,我们需要从用户处获取身份证号码。可以通过以下代码获取用户输入的身份证号码:
# 获取用户输入的身份证号码 id_number = input("请输入身份证号码:")
二、验证身份证号码长度
身份证号码的长度必须是18位,其中前17位为数字,最后一位可能是数字或字母。我们可以使用以下代码验证身份证号码的长度:
# 验证身份证号码的长度是否合法 if len(id_number) != 18: print("身份证号码长度不合法")
三、验证身份证号码格式
身份证号码的格式是固定的,前17位为数字,最后一位可能是数字或字母。我们可以使用正则表达式对身份证号码进行格式验证:
import re # 验证身份证号码的格式是否合法 pattern = "^[1-9]\d{16}[0-9Xx]$" if not re.match(pattern, id_number): print("身份证号码格式不合法")
四、计算身份证号码的校验位
身份证号码的最后一位是校验位,它可以通过前17位的数字计算得出。我们可以使用以下代码计算校验位:
# 计算身份证号码的校验位 weight = [int(i) for i in "731841672531"] checksum = 0 for i in range(17): checksum += int(id_number[i]) * weight[i] remainder = checksum % 11 if remainder == 1: check_digit = 'X' else: check_digit = str(12 - remainder) # 验证身份证号码的校验位是否正确 if id_number[-1].upper() != check_digit: print("身份证号码校验位不正确")
五、完整代码示例
以下是完整的身份证验证程序:
import re # 获取用户输入的身份证号码 id_number = input("请输入身份证号码:") # 验证身份证号码的长度是否合法 if len(id_number) != 18: print("身份证号码长度不合法") # 验证身份证号码的格式是否合法 pattern = "^[1-9]\d{16}[0-9Xx]$" if not re.match(pattern, id_number): print("身份证号码格式不合法") # 计算身份证号码的校验位 weight = [int(i) for i in "731841672531"] checksum = 0 for i in range(17): checksum += int(id_number[i]) * weight[i] remainder = checksum % 11 if remainder == 1: check_digit = 'X' else: check_digit = str(12 - remainder) # 验证身份证号码的校验位是否正确 if id_number[-1].upper() != check_digit: print("身份证号码校验位不正确")
通过以上代码,我们可以验证用户输入的身份证号码的合法性,确保应用系统中使用的身份证号码都是合法的。