python 身份证工具

介绍:

       可以解析身份证,获取身份证的省,市,区信息,年龄,性别,生日信息

import re
from datetime import datetime
import json

class IDCardParserUtil:

    def __init__(self):
        pass

    # 身份证号码前6位对应省市区编码
    id_card_area_codes = {

    }

    @staticmethod
    def parseIdCard(id_card):
        # 从文件加载身份证号码前6位对应省市区编码
        with open('../files/id_card_area_codes.json', 'r', encoding='utf-8') as f:
            IDCardParserUtil.id_card_area_codes =json.load(f)
        # 定义身份证号码的正则表达式模式
        pattern = r'^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dXx]$'

        # 使用正则表达式匹配身份证号码
        if not re.match(pattern, id_card):
            raise ValueError("身份证号码格式不正确 id_card: "+id_card)

        # 提取前6位作为省市区编码
        area_code = id_card[:6]
        province = IDCardParserUtil.id_card_area_codes.get(area_code[:2] + '0000', '未知')
        city = IDCardParserUtil.id_card_area_codes.get(area_code[:4] + '00', '未知')
        district = IDCardParserUtil.id_card_area_codes.get(area_code, '未知')

        # 提取出生日期部分
        birth_year = int(id_card[6:10])
        birth_month = int(id_card[10:12])
        birth_day = int(id_card[12:14])
        birth_date = datetime(birth_year, birth_month, birth_day).strftime('%Y-%m-%d')

        # 提取性别
        gender_code = int(id_card[16:17])
        gender = '男' if gender_code % 2 != 0 else '女'

     # 计算年龄
        today = datetime.today()
        age = today.year - birth_year - ((today.month, today.day) < (birth_month, birth_day))

        return {
            'province': province,
            'city': city,
            'district': district,
            'birth_date': birth_date,
            'birth_year': birth_year,
            'birth_month': birth_month,
            'birth_day': birth_day,
            'gender': gender,
            'age': age
        }

if __name__ == '__main__':

    # 示例身份证号码
    id_card = "11010519980801007X"

    try:
        result = IDCardParserUtil.parseIdCard(id_card)
        print(result)
    except ValueError as e:
        print(e)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/776058.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

无人机水运应用场景

航行运输 通航管理&#xff08;海事通航管理处&#xff09; 配员核查流程 海事员通过VHF&#xff08;甚高频&#xff09;系统与船长沟通核查时间。 无人机根据AIS&#xff08;船舶自动识别系统&#xff09;报告的船舶位置&#xff0c;利用打点定位 功能飞抵船舶上方。 使用…

大型能源电力集团需要什么样的总部数据下发系统?

能源电力集团的组织结构是一个复杂的系统&#xff0c;包括多个职能部门和子分公司。这些子分公司负责具体的电力生产、销售、运维等业务。这些部门和公司协同工作&#xff0c;确保电力生产的顺利进行&#xff0c;同时关注公司的长期发展、市场拓展、人力资源管理、财务管理和公…

SCI一区级 | Matlab实现BO-Transformer-LSTM多特征分类预测/故障诊断

SCI一区级 | Matlab实现BO-Transformer-LSTM多特征分类预测/故障诊断 目录 SCI一区级 | Matlab实现BO-Transformer-LSTM多特征分类预测/故障诊断效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.【SCI一区级】Matlab实现BO-Transformer-LSTM特征分类预测/故障诊断&…

winform2

12.TabControl 导航控制条 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace zhiyou_…

发现CPU占用过高,该如何排查解决?

1.使用top命令 查看cpu占用最多的进程 2.使用 top -H -p pid 发现有两个线程占用比较大 3.将线程id转换为16进制 使用命令 printf 0x%x\n pid 4.使用 jstack pid | grep 线程id(16进制&#xff09; -A 20 &#xff08;显示20行&#xff09; 根据代码显示进行错误排查

2024年7月5日 (周五) 叶子游戏新闻

老板键工具来唤去: 它可以为常用程序自定义快捷键&#xff0c;实现一键唤起、一键隐藏的 Windows 工具&#xff0c;并且支持窗口动态绑定快捷键&#xff08;无需设置自动实现&#xff09;。 卸载工具 HiBitUninstaller: Windows上的软件卸载工具 《乐高地平线大冒险》为何不登陆…

娱乐圈惊爆已婚男星刘端端深夜幽会

【娱乐圈惊爆&#xff01;已婚男星刘端端深夜幽会&#xff0c;竟是《庆余年》二皇子“戏外风云”】在这个信息爆炸的时代&#xff0c;娱乐圈的每一次风吹草动都能瞬间点燃公众的热情。今日&#xff0c;知名娱乐博主刘大锤的一则预告如同投入湖中的巨石&#xff0c;激起了层层涟…

关于下载obsidian SimpRead Sync中报错的问题

参考Kenshin的配置方法&#xff0c;我却在输入简悦的配置文件目录时多次报错。 bug如下&#xff1a; 我发现导出来的配置文件格式如下&#xff1a; 然后根据报错的bug对此文件名进行修改&#xff0c;如下&#xff1a; 解决。

Java数据结构-树的面试题

目录 一.谈谈树的种类 二.红黑树如何实现 三.二叉树的题目 1.求一个二叉树的高度&#xff0c;有两种方法。 2.寻找二叉搜索树当中第K大的值 3、查找与根节点距离K的节点 4.二叉树两个结点的公共最近公共祖先 本专栏全是博主自己收集的面试题&#xff0c;仅可参考&#xf…

暑假前端知识速成【CSS】系列一

坚持就是希望&#xff01; 什么是CSS? CSS 指的是层叠样式表* (Cascading Style Sheets)CSS 描述了如何在屏幕、纸张或其他媒体上显示 HTML 元素CSS 节省了大量工作。它可以同时控制多张网页的布局外部样式表存储在 CSS 文件中 *&#xff1a;也称级联样式表。 CSS语法 在此例…

微信小程序的智慧物流平台-计算机毕业设计源码49796

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3研究方法 1.4开发技术 1.4.1 微信开发者工具 1.4.2 Node.JS框架 1.4.3 MySQL数据库 1.5论文结构与章节安排 2系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 用户登录流程 2.2.2 数据删除流程 2.3 系统功能分…

Windows 上帝模式是什么?开启之后有什么用处?

Windows 上帝模式是什么 什么是上帝模式&#xff1f;Windows 上帝模式&#xff08;God Mode&#xff09;是一个隐藏的文件夹&#xff0c;通过启用它&#xff0c;用户可以在一个界面中访问操作系统的所有管理工具和设置选项。这个功能最早出现在 Windows Vista 中&#xff0c;并…

【K8s】专题六(4):Kubernetes 稳定性之初始化容器

以下内容均来自个人笔记并重新梳理&#xff0c;如有错误欢迎指正&#xff01;如果对您有帮助&#xff0c;烦请点赞、关注、转发&#xff01;欢迎扫码关注个人公众号&#xff01; 目录 一、基本介绍 二、主要特点 三、资源清单&#xff08;示例&#xff09; 一、基本介绍 初…

小学英语语法

目录 a和an的用法名词的单复数be动词和人称代词&#xff08;主格&#xff09;指示代词形容词物主代词名词所有格双重所有格方位介词some&#xff0c;any和no的用法How many和How much的用法情态动词can的用法祈使句人称代词&#xff08;宾格&#xff09;常见实义动词的用法一般…

【MySQL备份】Percona XtraBackup总结篇

目录 1.前言 2.问题总结 2.1.为什么在恢复备份前需要准备备份 2.1.1. 保证数据一致性 2.1.2. 完成崩溃恢复过程 2.1.3. 解决非锁定备份的特殊需求 2.1.4. 支持增量和差异备份 2.1.5. 优化恢复性能 2.2.Percona XtraBackup的工作原理 3.注意事项 1.前言 在历经了详尽…

深入理解 Webhook 与 API 的区别

作为人类&#xff0c;我们希望技术能帮助我们更快捷、更便捷地与更多人交流。但要实现这一目标&#xff0c;我们首先需要找到一种方法让技术能够彼此对话。 这就是 API 和 Webhook 的用武之地。 API 和 Webhook 都能够促进两个应用之间的数据同步和传递。然而&#xff0c;它们…

MySQL视图教程(03):列出视图

文章目录 MySQL 列出视图语法使用场景示例结论 MySQL 列出视图 MySQL 是一种流行的关系型数据库管理系统&#xff0c;用于创建和管理数据库中的表、视图等对象。在 MySQL 中&#xff0c;视图是一种虚拟表&#xff0c;可以从一个或多个实际表中检索数据&#xff0c;并根据特定的…

springboot整合Camunda实现业务

1.bean实现 业务 1.画流程图 系统任务&#xff0c;实现方式 2.定义bean package com.jmj.camunda7test.process.config;import lombok.extern.slf4j.Slf4j; import org.camunda.bpm.engine.TaskService; import org.camunda.bpm.engine.delegate.JavaDelegate; import org.…

【一】m2芯片的mac中安装ubuntu24虚拟机集群

文章目录 1. 虚拟机配置2. 复制虚拟机2.1 修改主机名2.2 修改网络 1. 虚拟机配置 在官方网站下载好ubuntu24-arm版镜像开始安装&#xff0c;安装使用VMWare Fusion的社区免费授权版,使用一台m2芯片的mac电脑作为物理机平台。 为什么选择ubuntu24&#xff1f;因为centOS7目前已…

php简单商城小程序系统源码

&#x1f6cd;️【简单商城小程序】&#x1f6cd;️ &#x1f680;一键开启&#xff0c;商城搭建新体验&#x1f680; 你还在为繁琐的商城搭建流程头疼吗&#xff1f;现在&#xff0c;有了简单商城系统小程序&#xff0c;一切变得轻松又快捷&#xff01;无需复杂的编程知识&a…