如何利用Python输入身份证号码,输出后用*将出生日期覆盖?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何利用Python输入身份证号码,输出后用*将出生日期覆盖?相关的知识,希望对你有一定的参考价值。
参考技术A #实验用的身份证号码是随便乱输的,如果需要增加一些其他功能,私信我#这个不能识别生日的日期是否有异常(比如说不能识别日期是否大于31天)
try:
number = input('请输入你的身份证号码:')
int(number)#检测是否全为数字
if len(number) != 18:
int('a')#手动异常
number = number[:6] + '*' * 8 + number[-4:]
print()
except:
print('你输入的有异常!') 参考技术B a列假设是身份证号,那么b1输入:
=if(len(a1)=18,text(mid(a1,7,4)&"-"&mid(a1,11,2)&"-"&mid(a1,13,2),"yyyy-m-d"),text("19"&mid(a1,7,2)&"-"&mid(a1,11,2)&"-"&mid(a1,13,2),"yyyy-m-d"))
公式下拉!
各位兄弟都来,如何在sql里利用身份证查询出生日期?
在SQL里,我有一个表叫养老表,里面有这几列
姓名 居民身份号码 离退休日期
李四 有15位的 1998-09-08
………… 有18位的 …………
………… 有末尾是X的 ………………
大概就是这,请问如何利用sql语句查询出生日期,并且计算出他们退休时的年龄,关键是各样的身份证都有,头都大了!
case LEN(身份证号)
when 15 then convert(date, SUBSTRING(身份证号, 7, 6), 12) /*15位身份证号: 7-12位为yymmdd */
when 18 then convert(date, SUBSTRING(身份证号, 7, 8), 112) /*18位身份证号: 7-14位为yyyymmdd */
else NULL
end as 出生日期,
case LEN(身份证号)
/*身份证号出生日期后3位, 如果为奇数则性别为男, 55岁退休; 如果为偶数则为女, 50岁退休*/
when 15 then dateadd(year, case convert(int, SUBSTRING(身份证号,15,1))%2 when 1 then 55 else 50 end, convert(date, SUBSTRING(身份证号, 7, 6), 12) )
when 18 then dateadd(year, case convert(int, SUBSTRING(身份证号,17,1))%2 when 1 then 55 else 50 end, convert(date, SUBSTRING(身份证号, 7, 8), 112) )
else NULL
end as 退休日期
from 养老表 参考技术A 身份证只有15和18位的区分
按照你的要求做了一下简单的表
CREATE TABLE TEST_TAB
(
NAME VARCHAR2(60),
IDENTIFID VARCHAR2(30),
LEAVEDATE DATE
)
select a.NAME,
round((a.LEAVEDATE - to_date(substr(a.IDENTIFID,7,8),'yyyy/mm/dd'))/365)||'歳' ||
round(mod(((a.LEAVEDATE - to_date(substr(a.IDENTIFID,7,8),'yyyy/mm/dd'))/365),1)*12)||'月' ||
round(mod(mod(((a.LEAVEDATE - to_date(substr(a.IDENTIFID,7,8),'yyyy/mm/dd'))/365),1)*12,1)*10) ||'天' from
(
select NAME ,IDENTIFID , LEAVEDATE
from TEST_TAB
where length(IDENTIFID)=18
) a
union all
select a.NAME,
round((a.LEAVEDATE - to_date(concat('19',substr(a.IDENTIFID,7,6)),'yyyy/mm/dd'))/365)||'歳' ||
round(mod(((a.LEAVEDATE - to_date(concat('19',substr(a.IDENTIFID,7,6)),'yyyy/mm/dd'))/365),1)*12)||'月' ||
round(mod(mod(((a.LEAVEDATE - to_date(concat('19',substr(a.IDENTIFID,7,6)),'yyyy/mm/dd'))/365),1)*12,1)*10) ||'天' from
(
select NAME ,IDENTIFID , LEAVEDATE
from TEST_TAB
where length(IDENTIFID)=15
) a
因为没有考虑到性能问题。估计还得改善 参考技术B 和末尾没关系吧,最多判断下15位和18位
SELECT case when length(column)=18 then substring(column,7,8)
when length(column)=15 then concat('19',substring(column,7,6))
else '身份证号码不规范'
end
FROM TABLE
其中column是身份证号码字段 TABLE 是表名
算出出生年月,算退休就是加55年还是50年吧。这个加法太简单就不写了
以上是关于如何利用Python输入身份证号码,输出后用*将出生日期覆盖?的主要内容,如果未能解决你的问题,请参考以下文章
在EXCELL里输入身份证号后,怎样利用函数提取性别,生日呢?