编写一个python程序对身份证号码进行校验,输入格式只有一行,为一个18位身份证号,末尾数字或大写字母X
可以参考下:
def is_true_encoded(id_number):
data_list = list(str(id_number))
data_length = len(data_list)
if id_number.endswith('X') or id_number.endswith('x'):
data_list[data_length - 1] = 10
weight_list = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]
weight_length = len(weight_list)
if data_length != weight_length:
return False
sum = 0
for i in range(0, data_length):
sum += int(data_list[i]) * weight_list[i]
return sum % 11 == 1
if __name__ == '__main__':
if is_true_encoded(input()):
print("身份证号合法!")
else:
print("身份证号不合法")
这是老师上课讲的图解,仅供参考,应该是看不懂的
具体代码实现
"""
@version:
@filename : 链表反转
@author : liuhongjie
@projectname: day02
@time: 2022/05/30
"""
#定义一个节点类,用来等一下实现链表的创建
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
#实现链表的反转
def reverseList(self, head):
pre, cur = None, head
while cur:
tmp = cur.next
cur.next = pre
pre = cur
cur = tmp
return pre
#把反转以后的链表打印出来
def print_linked_list(head):
if not head or not head.next:
return []
result = []
while head:
result.append(head.val)
head = head.next
return result
# 调用节点类,创建一个链表: a->b->c,分别对应的就是:1,2,3
a = ListNode(1)
b = ListNode(2)
c = ListNode(3)
a.next = b
b.next = c
#创建一个实例化对象
demo = Solution()
print(print_linked_list(demo.reverseList(a)))
问题解答:
可以使用Python的正则表达式来对身份证号码进行格式校验,具体步骤如下:
import re
18位身份证格式:前17位为数字,最后一位为数字或字母X
regex = r'^\d{17}[\dXx]$'
id_number = input("请输入身份证号码:")
if re.match(regex, id_number):
print("格式正确")
else:
print("格式错误")
完整代码如下:
import re
regex = r'^\d{17}[\dXx]$'
id_number = input("请输入身份证号码:")
if re.match(regex, id_number):
print("格式正确")
else:
print("格式错误")
需要注意的是,这只是对身份证号码格式的简单校验,不能保证输入的号码是真实有效的。如果需要进行更完整的校验,可以考虑使用其他方法(例如校验码算法等)。
关于程序调用的方式和需要用到的库,请参考上面提供的例子中的代码注释和代码实现。目前暂时不需要其他特殊的库来实现身份证号码的格式校验。