根据身份证号计算周岁年龄

news/2024/11/30 20:47:55/

1、测试

import pandas as pd
import datetime
temp_data='110221195404083625'
v_start_date=temp_data[6:14]
now = datetime.datetime.now()
now = now.strftime('%Y%m%d')
v_year_end=datetime.datetime.strptime(now, '%Y%m%d').year
v_month_end=datetime.datetime.strptime(now, '%Y%m%d').month
v_day_end=datetime.datetime.strptime(now, '%Y%m%d').day
v_year_start=datetime.datetime.strptime(v_start_date, '%Y%m%d').year
v_month_start=datetime.datetime.strptime(v_start_date, '%Y%m%d').month
v_day_start=datetime.datetime.strptime(v_start_date, '%Y%m%d').day#1、若今天的月大于生日的月,年龄=今年的年-生日的年
if v_month_end>v_month_start:age=v_year_end-v_year_start
#2、若今天的月小于生日的月,年龄=今年的年-生日的年-1
elif v_month_end<v_month_start:age=v_year_end-v_year_start-1
#3、若今天的月等于生日的月:
else:
#    若今天的日小于生日的日,年龄=今年的年-生日的年-1if v_day_end<v_day_start:age=v_year_end-v_year_start-1
#    若今天的日大于等于生日的日,年龄=今年的年-生日的年else:age=v_year_end-v_year_start

2、封装

def calculate_age(temp_data):'''Function: 根据身份证计算周岁年龄Parameters: temp_data为身份证号Return: 该身份证号周岁年龄计算逻辑:若今天计算周岁有以下几个特征:1、若今天的月大于生日的月,年龄=今年的年-生日的年2、若今天的月小于生日的月,年龄=今年的年-生日的年-13、若今天的月等于生日的月:若今天的日小于生日的日,年龄=今年的年-生日的年-1若今天的日大于等于生日的日,年龄=今年的年-生日的年    '''v_start_date=temp_data[6:14]now = datetime.datetime.now()now = now.strftime('%Y%m%d')v_year_end=datetime.datetime.strptime(now, '%Y%m%d').yearv_month_end=datetime.datetime.strptime(now, '%Y%m%d').monthv_day_end=datetime.datetime.strptime(now, '%Y%m%d').dayv_year_start=datetime.datetime.strptime(v_start_date, '%Y%m%d').yearv_month_start=datetime.datetime.strptime(v_start_date, '%Y%m%d').monthv_day_start=datetime.datetime.strptime(v_start_date, '%Y%m%d').day#1、若今天的月大于生日的月,年龄=今年的年-生日的年if v_month_end>v_month_start:age=v_year_end-v_year_start#2、若今天的月小于生日的月,年龄=今年的年-生日的年-1elif v_month_end<v_month_start:age=v_year_end-v_year_start-1#3、若今天的月等于生日的月:else:#    若今天的日小于生日的日,年龄=今年的年-生日的年-1if v_day_end<v_day_start:age=v_year_end-v_year_start-1#    若今天的日大于等于生日的日,年龄=今年的年-生日的年else:age=v_year_end-v_year_startreturn age

3、调用

col_name='身份证号'
data=pd.DataFrame({col_name:['110221195404083625','110221195104073628','110109196404090678','110109195706010923','110109195501031210']})
data['age']=data[col_name].apply(lambda x:calculate_age(x))

 


http://www.ppmy.cn/news/726040.html

相关文章

15/18位身份证号码正则表达式(详细版)

xxxxxx yyyy MM dd 375 0 十八位 xxxxxx yy MM dd 75 0 十五位 地区&#xff1a;[1-9]\d{5} 年的前两位&#xff1a;(18|19|([23]\d)) 1800-3999 年的后两位&#xff1a;\d{2} 月份&#xff1a;((0[1-9])|(10|11|12)) 天数&#xff1a;(([0-2][1-9…

身份证号码15位转18位

15位身份证号码组成规则 6位地区码6位出生年月日3位顺序码&#xff08;最后一位代表性别&#xff0c;奇数为男&#xff0c;偶数为女&#xff09; 18位身份证号码组成规则 6位地区码8位出生年月日3位顺序码&#xff08;最后一位代表性别&#xff0c;奇数为男&#xff0c;偶数…

身份证验证信息15位或18位

一、身份证号码的结构和表示形式 1、号码的结构 根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定&#xff0c;公民身份号码是特征组合码&#xff0c;由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为&#xff1a;六位数字地址码&#xff0c…

css文字图标(阿里图标)使用及引入方式

首先打开 iconfont图标 网页 选择素材库中的单色图标库 选择自己需要用的图标 这里简绍四种类型的引入方式&#xff0c;其中是网页上的三种引入方式&#xff1a; 1. Unicode 使用方式 复制代码 引入样式 (这里是线上引入 通过网址引入的) 引入样式注意路径完整性 标签中间放入…

后端常用api

Map map.computeIfAbsent() 1、首先会判断map中是否有对应的Key 2.1、如果没有对应的Key&#xff0c;则会创建一个满足Value类型的数据结构放到Value的位置中&#xff1b; 2.2、如果有对应的Key&#xff0c;则会操作该Key对应的Value. public static void main(String[] args) …

Android9.0 MTK 平板横屏方案修改(强制app横屏 + 开机logo/动画+关机充电横屏 + RecoveryUI 横屏)

文章较长建议先收藏再看 拆解步骤 1、app 强制横屏显示&#xff0c;无视 android:screenOrientation“portrait” 属性 2、屏幕触摸坐标修改为横屏 3、开机动画横屏 4、开机logo、关机充电动画横屏 5、RecoveryUI 横屏 上代码 ##1、app 强制横屏显示 修改 rotationFor…

搬来一篇直播,视频相关理解的文章

前言 随着音视频领域的火热&#xff0c;在很多领域(教育&#xff0c;游戏&#xff0c;娱乐&#xff0c;体育&#xff0c;跑步&#xff0c;餐饮&#xff0c;音乐等)尝试做音视频直播/点播功能&#xff0c;那么作为开发一个小白&#xff0c;如何快速学习音视频基础知识&#xff0…

android音视频点/直播模块开发

前言 随着音视频领域的火热&#xff0c;在很多领域&#xff08;教育&#xff0c;游戏&#xff0c;娱乐&#xff0c;体育&#xff0c;跑步&#xff0c;餐饮&#xff0c;音乐等&#xff09;尝试做音视频直播/点播功能&#xff0c;那么作为开发一个小白&#xff0c;如何快速学习音…