编写python程序对身份证号校验

编写一个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("身份证号不合法")
  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7786313
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:【期末课设】python爬虫基础与可视化,使用python语言以及支持python语言的第三方技术实现爬虫功能,定向爬取网页的图片数据,并且实现批量自动命名分类下载。
  • 你还可以看下python参考手册中的 python- 格式化字符串字面值
  • 除此之外, 这篇博客: python实现链表的反转中的 python里面是没有链表这个概念的,所以我们需要自己构造一个链表,然后再实现链表的反转; 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 这是老师上课讲的图解,仅供参考,应该是看不懂的
    在这里插入图片描述

    具体代码实现

    """
    @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,分别对应的就是:123
    a = ListNode(1)
    b = ListNode(2)
    c = ListNode(3)
    a.next = b
    b.next = c
    #创建一个实例化对象
    demo = Solution()
    print(print_linked_list(demo.reverseList(a)))
    
    
    
  • 您还可以看一下 jeevan老师的Python量化交易,大操手量化投资系列课程之内功修炼篇课程中的 编程语言之Python环境安装小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题解答:

    可以使用Python的正则表达式来对身份证号码进行格式校验,具体步骤如下:

    1. 导入re库
    import re
    
    1. 定义正则表达式

    18位身份证格式:前17位为数字,最后一位为数字或字母X

    regex = r'^\d{17}[\dXx]$'
    
    1. 调用re.match()方法进行匹配
    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("格式错误")
    

    需要注意的是,这只是对身份证号码格式的简单校验,不能保证输入的号码是真实有效的。如果需要进行更完整的校验,可以考虑使用其他方法(例如校验码算法等)。

    关于程序调用的方式和需要用到的库,请参考上面提供的例子中的代码注释和代码实现。目前暂时不需要其他特殊的库来实现身份证号码的格式校验。