Python判断是否为身份证

身份证号码是一串特定的数字和字符组合,用于唯一标识一个人的身份信息。在进行数据处理或身份验证时,我们经常需要判断输入的字符串是否为有效的身份证号码。本文将使用Python编程语言,介绍如何判断一个字符串是否为身份证号码。

一、基本身份证号码格式

身份证号码的基本格式包括18位和15位两种。18位身份证号码由前17位数字和最后一位校验码组成,而15位身份证号码仅由15位数字组成。在对身份证号码进行判断时,我们首先要检查其基本格式是否正确。


import re

def is_valid_id_number(id_number):
    if not isinstance(id_number, str):
        return False
    
    pattern = r"^\d{17}(\d|X|x)$"
    if len(id_number) == 18:
        return bool(re.match(pattern, id_number))
    elif len(id_number) == 15:
        pattern = r"^\d{15}$"
        return bool(re.match(pattern, id_number))
    else:
        return False

上述代码中,我们利用正则表达式来匹配身份证号码的格式。首先判断输入是否为字符串类型,然后利用不同的正则表达式模式来匹配18位和15位身份证号码的格式。

二、身份证号码校验码

身份证号码的最后一位是校验码,用于验证前面17位数字的正确性。校验码的计算方法有特定规则,我们需要对身份证号码进行一系列计算,以确定校验码的正确性。


def get_check_digit(id_number):
    coefficient_list = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
    validate_char_list = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
    
    check_sum = sum([int(id_number[i]) * coefficient_list[i] for i in range(17)])
    check_digit_index = check_sum % 11
    
    return validate_char_list[check_digit_index]

def is_valid_check_digit(id_number):
    if len(id_number) != 18:
        return False
    
    return id_number[-1].upper() == get_check_digit(id_number[:-1]).upper()

上述代码中,我们首先定义了系数列表和校验字符列表,用于计算校验和和获取校验码。然后,通过对前17位数字和系数列表进行计算,得到校验和。最后,将校验和与身份证号码的最后一位进行比较,以验证校验码的正确性。

三、身份证号码地区和生日信息

身份证号码的前六位代表了所在地区的行政区划代码,接下来的八位代表了出生年月日。我们可以通过身份证号码提取出地区和生日信息,并进行进一步验证。


def extract_area(id_number):
    area_dict = {
        '11': '北京',
        '12': '天津',
        '13': '河北',
        '14': '山西',
        '15': '内蒙古',
        # 更多省份...
    }
    
    area_code = id_number[:2]
    return area_dict.get(area_code, '未知')

def extract_birthday(id_number):
    if len(id_number) == 18:
        birthday = id_number[6:14]
    elif len(id_number) == 15:
        birthday = '19' + id_number[6:12]
    else:
        return '未知'
    
    year = birthday[:4]
    month = birthday[4:6]
    day = birthday[6:8]
    
    return f'{year}年{month}月{day}日'

def is_valid_id_number(id_number):
    if not isinstance(id_number, str):
        return False
    
    # 检查基本格式
    pattern = r"^\d{17}(\d|X|x)$"
    if len(id_number) == 18:
        if not bool(re.match(pattern, id_number)):
            return False
    elif len(id_number) == 15:
        pattern = r"^\d{15}$"
        if not bool(re.match(pattern, id_number)):
            return False
    else:
        return False
    
    # 验证校验码
    if len(id_number) == 18:
        if not id_number[-1].upper() == get_check_digit(id_number[:-1]).upper():
            return False
    
    return True

上述代码中,我们利用字典将部分地区行政区划代码映射到对应的地区名称。然后,通过切片操作从身份证号码中提取出地区和生日信息,并进一步处理。最后,将处理结果返回。

四、判断是否为身份证号码


def is_id_number(id_number):
    if is_valid_id_number(id_number):
        area = extract_area(id_number)
        birthday = extract_birthday(id_number)
        
        return f'是有效的身份证号码,地区:{area},生日:{birthday}'
    else:
        return '不是有效的身份证号码'

上述代码中,我们调用前面编写的各个功能函数完成最终的判断。如果输入的字符串是有效的身份证号码,则同时返回地区和生日信息;否则返回不是有效的身份证号码。

至此,我们使用Python编程语言进行了身份证号码的判断。通过验证身份证号码的基本格式、校验码的正确性,以及提取和验证地区和生日信息,我们可以判断一个字符串是否为有效的身份证号码。

原创文章,作者:OYKM,如若转载,请注明出处:https://www.beidandianzhu.com/g/4038.html

(0)
OYKM的头像OYKM
上一篇 2024-12-29
下一篇 2024-12-30

相关推荐

  • Python37从零开始学下载

    Python是一种简单易学的编程语言,它具有丰富的库和工具,被广泛应用于Web开发、数据分析、人工智能等各个领域。本文将以Python3.7为例,为初学者介绍Python的下载和安…

    程序猿 2024-12-17
  • Python学习之多进程

    多进程是Python中重要的并发编程概念之一,它允许在同一时间内执行多个进程,并行处理多个任务。本文将从多个方面详细阐述Python学习之多进程的内容。 一、多进程简介 多进程是指…

    程序猿 2024-12-17
  • Python命令行窗口的解析

    Python命令行窗口是Python语言的交互式环境,提供了一种方便快捷的方式来编写和测试代码。本文将从不同的角度对Python命令行窗口进行详细的解析。 一、Python命令行窗…

    程序猿 2024-12-17
  • Python教你怎么做

    Python是一种易学易用的编程语言,具有丰富的功能和广泛的应用场景。本文将通过多个方面展示Python如何指导您进行编程开发。 一、Python语法基础 1、Python的变量和…

    程序猿 2024-12-17
  • Python可变数据结构

    Python是一种强大的编程语言,提供了丰富的数据结构来处理和组织数据。可变数据结构是其中一个重要的概念,它允许我们对数据进行修改和更新。本文将从多个方面详细介绍Python可变数…

    程序猿 2024-12-17
  • Python实现同一位置刷新显示

    在Python编程中,我们经常会遇到需要在同一位置实现刷新显示的场景。无论是在命令行界面还是图形界面中,同一位置刷新显示能够提升用户体验,使程序更加友好和动态。本文将从多个方面介绍…

    程序猿 2024-12-17
  • Python图像旋转代码用法介绍

    图片旋转是一种常见的图像处理操作,在Python中可以使用各种库来实现。本文将以Python为例,详细阐述图像旋转的代码实现。 一、准备工作 在开始编写图像旋转代码之前,我们需要准…

    程序猿 2024-12-17
  • Python缩进有关正确说法

    对于Python编程语言而言,缩进是一项非常重要的语法规则。它不仅仅是为了美观,更是为了代码的结构和逻辑的清晰性。在本文中,将从多个方面来详细阐述Python缩进的正确性。 一、缩…

    程序猿 2024-12-20
  • Python变量名的合法性测试

    Python是一种简洁、优雅且易于学习的编程语言,而变量是Python中的基础概念之一。在Python中,变量用来存储和表示数据,对于程序的执行起着至关重要的作用。在使用变量时,我…

    程序猿 2024-12-28
  • Python中eye的应用

    eye是Python中一个非常有用的函数,它用于生成单位矩阵。本文将从不同的角度详细阐述Python中eye的用法和应用场景。 一、创建单位矩阵 1、eye函数可以创建一个n×n的…

    程序猿 2024-12-17

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

分享本页
返回顶部