从身份证提取信息

由于工作的原因,会和个人的相关数据打交道。需求如下:

  1. 数据表中存在字段 客户号、出生日期、性别、身份证
  2. 由于数据量很大且很多客户数据存在问题,需要在获取客户的性别年龄时先从身份证获取,如果获取不到则使用原有的数据
  3. 使用数据库为ORACLE。

1 逻辑梳理

  1. 现有的身份证都是由18位字符组成,且 前17位由数字构成,7-14 位为我们的出生年月日,第17位如果为奇数为男性,如果为偶数为女性;
  2. 曾经的身份证有些为15位数字组成,7-12 位为我们的出生年月,最后一位奇数则为男,偶数则为女;
  3. 如果表中的身份证不是合法的身份证规则,则直接取表中原来的性别年龄

1 代码如下


-- 1 查询客户的客户号,并根据证件类型(ZHJNZL)和证件号提取身份证中信息
selectkehhao,trunc(months_between(to_date('20210101','yyyymmdd'),to_date(case when ZHJNZL = '10' and isidcard_new(ZHJHAO) = '1' then (case when length(trim(ZHJHAO)) = 18 then SubStr(ZHJHAO, 7, 8) else '19' || SubStr(ZHJHAO, 7, 6)end ) else CHUSRQ end , 'yyyymmdd'))/12) as AGE_CD,case when ZHJNZL = '10' and isidcard_new(ZHJHAO) = '1' then (case when length(trim(ZHJHAO)) = 18 and mod(SubStr(ZHJHAO, 17, 1),2) = 1 then '1' --男when length(trim(ZHJHAO)) = 18 and mod(SubStr(ZHJHAO, 17, 1),2) = 0 then '2' --女when length(trim(ZHJHAO)) = 15 and mod(SubStr(ZHJHAO, 15, 1),2) = 1 then '1' --男when length(trim(ZHJHAO)) = 15 and mod(SubStr(ZHJHAO, 15, 1),2) = 0 then '2' --女else '999'end ) else nvl2(XNGBIE,XNGBIE,'') end as SEX_CD
from TESTTABLE
;-- 2 使用函数验证是否为身份证create or replace function isIDCard_NEW(p_IDcard varchar2) return VARCHAR2 isIDcardlen integer;beginIDcardlen :=Length(trim(p_IDcard));if (IDcardlen = 18 and IS_NUMBER(SubStr(p_IDcard, 1, IDcardlen-1))='Y'and IS_DATE (substr(p_IDcard,7,8))='Y')or(IDcardlen = 15 and IS_NUMBER(SubStr(p_IDcard, 1, IDcardlen))='Y'and IS_DATE ('19' || subsTR(p_IDcard,7,6))='Y')thenreturn '1';ELSEreturn '0';end if;end isIDCard_NEW;

Over !!

从身份证提取年龄性别相关推荐

  1. Excel公式-----身份证提取年龄

    假如: A1 单元格里面手机写入身份证 B1 自动写入年龄,当然(也可以提取别的信息) B1单元格写入: =YEAR(NOW())-MID(A1,7,4) 下面的写法, 是前面单元格没有填写内容,从而 ...

  2. js校验用户身份证省市区年龄性别

    一般正则校验不够严谨,只能比较泛泛,有的只校验长度 常规正则:/^(\d){17}([0-9xX])$/.test(code) // code 身份证号码 本校验可以校验:格式.省市区.年龄.年月日. ...

  3. springboot 根据身份证号计算性别和年龄

    基本知识:        身份证号码: 15位:6位地址码+6位出生年月日(900101代表1990年1月1日出生)+3位顺序码               18位:6位地址码+8位出生年月日(199 ...

  4. 通过身份证号码得出性别和年龄

    //通过身份证号码得出性别和年龄 export const analyzeIDCard = function(IDCard) {var sexAndAge = {};//获取用户身份证号码var us ...

  5. js脚本根据身份证号获取性别、年龄、家庭地址、生日

    做项目测试时需要根据身份证号获取其信息,也不想调接口,就自己在本地通过收集资料整合了一个 当身份证号的焦点失去选中后,根据身份证号获取性别.年龄.家庭地址.生日 直接上代码: index.html & ...

  6. java身份证工具类(校验身份证是否合法、通过身份证获取年龄、性别、生日,将15位身份证转为18位等)

    一.简介 因为工作需要经常用到身份证做一些相关操作,于是通过查阅资料总结出一些常用的工具方法,包括校验身份证是否合法.通过身份证获取年龄.通过身份证获取性别.通过身份证获取户籍地址.通过身份证获取生日 ...

  7. JS身份证号码校验,JS根据身份证号码获取出生年月日,JS根据出生年月日获取年龄,JS根据身份证号码获取性别

    目录 1.JS身份证号码校验 2.JS根据身份证号码获取出生年月日 3.JS根据出生年月日获取年龄 4.JS根据身份证号码获取性别 1.JS身份证号码校验 /*** 身份证校验** @export* ...

  8. mysql根据身份证号查 性别、年龄以及出生日期

    mysql根据身份证号查性别.年龄以及出生日期 博客里面还有对应的java工具类:芜湖,起飞 这个身份证号也就只针对大陆身份证号 SELECT p.id,-- 这是根据身份证号求年龄 (YEAR(NO ...

  9. C# 获取身份证中的性别/年龄

    获取身份证中的性别,代码如下: public static bool GetGenderByIdCard(string idCard) {if (string.IsNullOrWhiteSpace(i ...

  10. vue表单验证填写判断身份证自动写入年龄性别和出生年月日

    判断身份证 我用的是表单验证 在你验证的下方写入就跟我这样差不多这是一个正则表达式 const rules = reactive<FormRules>({name: [{ required ...

最新文章

  1. 项目总结二:人脸识别项目(Face Recognition for the Happy House)
  2. 为您的Office文档加把锁-ADRMS的安装
  3. mysql 8.0远程连接_安装mysql 8.0.17并配置远程访问的方法
  4. Linux socket can例程python版本
  5. js高级(类和对象)
  6. mysql数据库设置索引 以下_如何设置MySQL数据库表的索引总长度
  7. JS 中 Date() 的其他操作集锦
  8. 自己写的demo---equals()跟==的区别
  9. scite editor on mac
  10. mysql join 主表唯一_mysql left join 右表数据不唯一的情况解决方法
  11. Java 就业培训教程 再读笔记
  12. win10 安装gym[all]与mujoco的踩坑日志
  13. 用js把数字转化成为大写金额
  14. 电容或电感的电压_纯电阻、纯电感和纯电容电路
  15. 【面试题】 做了一份前端面试复习计划,保熟~
  16. 测试网上哪款软件最好,手机测试软件哪款好用?4款测试软件推荐
  17. 前端效果 -- 实现折叠、展开动画效果
  18. 19-图片标签注意点
  19. 消防行业感温电缆厂家有哪些?
  20. Direct2D 图形计算

热门文章

  1. Numerical Computing with MaTLAB(matlab数值计算)书中的工具箱 ncm下载以及课本答案和程序下载
  2. 使用eclipse打包app以及AndroidStudio和Eclipse中app签名修改等问题(SH1和MD5)
  3. Android触摸屏驱动,电阻屏,电容屏
  4. 比特红:万物可直播、人人能带货
  5. STM32神舟III号 驱动直流电机学习(三 )
  6. 【Pycharm】笔记内容010:记录Pycharm报错“Can not find 程序所在目录 或者Can not run program...“的问题解决
  7. 量子计算机介绍ppt,量子信息ppt
  8. buildroot external-toolchain的一次踩坑经历
  9. android tts 音量,Android TTS音量控制
  10. 5G 智能融合城域网特点与组网方案