应用场景

某些场景中,需要从国人身份证号中提取出生日期及性别,现整理出MySql版本的提取方法,了解其规则后,其他数据库异曲同工。

目前国人身份证分为一代和二代,一代15位,二代18为。基本区分如下:

18位证件号

1~6位为地区省市县编码,7~14位出生年月日,15~16所在地派出所,17位性别(奇男、偶女),18位为校验码

15位证件号

1~6位为地区省市县编码,7~12位出生年月日(年为两位),13~15为顺序码,末位区分男女(奇男、偶女)。

解决方案

解决方案为根据证件号规则,创建两个函数:fun_idno_birthday、fun_idno_sex提取。

出生日期提取

通过创建函数fun_idno_birthday获取,具体代码如下:

DELIMITER $$

DROP FUNCTION IF EXISTS fun_idno_birthday$$

CREATE FUNCTION fun_idno_birthday(idno VARCHAR(25)) RETURNS VARCHAR(10) CHARSET utf8

BEGIN

DECLARE v_birth VARCHAR(10) DEFAULT NULL;

DECLARE v_birth_1 VARCHAR(10) DEFAULT NULL;

DECLARE v_birth_2 VARCHAR(10) DEFAULT NULL;

IF idno IS NULL OR '' = idno THEN RETURN NULL; END IF;

IF LENGTH(idno) = 18 THEN

SET v_birth = SUBSTRING(idno,7,8);

SET v_birth_1 = LEFT(v_birth,4);

SET v_birth_2 = RIGHT(v_birth,4);

SET v_birth = CONCAT(v_birth_1,'-',LEFT(v_birth_2,2),'-',RIGHT(v_birth_2,2));

RETURN v_birth;

END IF;

IF LENGTH(idno) = 15 THEN

SET v_birth = CONCAT('19',SUBSTRING(idno,7,6));

SET v_birth_1 = LEFT(v_birth,4);

SET v_birth_2 = RIGHT(v_birth,4);

SET v_birth = CONCAT(v_birth_1,'-',LEFT(v_birth_2,2),'-',RIGHT(v_birth_2,2));

RETURN v_birth;

END IF;

RETURN NULL;

END$$

DELIMITER ;

性别提取

通过创建函数fun_idno_sex获取,具体代码如下:

DELIMITER $$

DROP FUNCTION IF EXISTS fun_idno_sex$$

CREATE FUNCTION fun_idno_sex(idno VARCHAR(25)) RETURNS VARCHAR(10) CHARSET utf8

BEGIN

DECLARE v_num VARCHAR(10) DEFAULT NULL;

IF idno IS NULL OR '' = idno THEN RETURN NULL; END IF;

-- 倒数第二位为性别

IF LENGTH(idno) = 18 THEN

SET v_num = LEFT(RIGHT(idno,2),1);

IF v_num % 2 = 0 THEN RETURN '0';-- 偶女

ELSE RETURN '1';-- 奇男

END IF;

END IF;

-- 倒数第一位为性别

IF LENGTH(idno) = 15 THEN

SET v_num = RIGHT(idno,1);

IF v_num % 2 = 0 THEN RETURN '0';-- 偶女

ELSE RETURN '1';-- 奇男

END IF;

END IF;

RETURN NULL;

END$$

DELIMITER ;

使用方法

直接在逻辑中使用,传递证件号作为参数。

SELECT fun_idno_birthday('52022119890408407X');

SELECT fun_idno_birthday('370986890623212');

SELECT fun_idno_sex('52022119890408407X');

SELECT fun_idno_sex('370986890623212');

注意: fun_idno_sex返回值:0-女 1-男,NULL为非有效证件号

mysql身份证校验码_MySql整理篇之身份证提取生日性别相关推荐

  1. mysql身份证校验码_mysql正则表达式验证身份证,并获取年龄、生日、性别

    mysql正则表达式验证身份证,并获取年龄.生日.性别 发布时间:2018-05-17 16:28, 浏览次数:4844 , 标签: mysql正则表达式,mysql验证身份证,REGEXP mysq ...

  2. mysql 单标递归_MySql整理篇之递归

    问题:Mysql递归实现 方式一:存储过程,方式二:函数 本文再其基础之上考研效率问题,只在乎实现的同学参考大侠的足矣,想继续提高效率的可继续阅读.再参考博文中,大侠已说明,推介方式二(函数)实现,下 ...

  3. mysql身份证校验码_用sql实现18位身份证校验代码分享 身份证校验位计算

    身份证校验码的计算方法 1.将前面的身份证号码17位数分别乘以不同的系数.第i位对应的数为[2^(18-i)]mod11.从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 ...

  4. mysql 字符集 校验规则_MySQL字符集及校验规则

    1.字符集 # Mysql 的字符集有4个级别的默认设置:服务器级,数据库级,表级和字段级,客户端交互时,也可以指定字符集 # 字符集:是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称, ...

  5. 【转载】用Python计算身份证校验码

    原来的天朝良民证是15位,构成如下:   1-6位:地址码.采用的是行政区划代码,可以去   统计局的网站   查.   7-12位:生日期码.构成为yymmdd.   13-15位:顺序码.每个地区 ...

  6. 用Python计算身份证校验码

    转自:http://my.oschina.net/moooofly/blog/147958 原来的天朝良民证是15位,构成如下:  1-6位:地址码.采用的是行政区划代码,可以去 统计局的网站 查.  ...

  7. sql判断邮箱是否合法_分享一个oracle身份证校验函数,判断你的身份证是否合法...

    概述 有个朋友说能不能用函数来实现对身份证的校验,所以这里用Oracle的函数来实现,其他数据库异曲同工.. 身份证校验函数 CREATE OR REPLACE FUNCTION Func_check ...

  8. mysql经典总结文章_MySQL基础篇(01):经典实用查询案例,总结整理

    MySQL基础篇(01):经典实用查询案例,总结整理 发布时间:2020-02-26 22:25:21 来源:51CTO 阅读:244 作者:知了一笑 本文源码:GitHub·点这里 || GitEE ...

  9. mysql身份证校验码_sql 语句 验证身份证号码

    展开全部 像这样写个视图就行了: create View eVMutiCard AS Select a.Badge,a.Name,a.DepID,a.Compid,a.JobID,a.Status,a ...

  10. mysql改国标码_MySQL 优化实施方案

    优化的哲学 优化风险 优化设计到变更,变更就有风险 优化方向 在数据库优化上有两个主要方面:即安全与性能.(CAP) 安全 ---> 数据可持续性 一致 性能 ---> 数据的高性能访问 ...

最新文章

  1. 【BZOJ2117】 [2010国家集训队]Crash的旅游计划
  2. 如何把纯真ip数据库导入到MySQL数据表中
  3. R语言-向量自回归模型VAR的实现
  4. Linux-常用系统管理命令
  5. A*B NTT快速数论变换
  6. [css] 写出固定子容器在固定的父容器下水平垂直居中的布局
  7. php计算购置税1007无标题,新旧个税计算公式对比–ps:世界上最好的语言PHP
  8. linux 查看是否安装perl模块
  9. petshop学习笔记(1)
  10. Android中关于Volley的使用(一)加载图片
  11. springmvc项目在启动完成之后执行一次方法_SpringMVC源码分析
  12. ivew select组件 DatePicker组件的清空
  13. thinkphp页面请求时间超过40S报404错误解决办法
  14. OOM框架AutoMapper基本使用(2)
  15. 如何写一个NES模拟器(一)
  16. 自尊是人生的高尚境界
  17. 54/74系列逻辑芯片
  18. 高一计算机课的总结,高中《信息技术》期末教学总结范文
  19. 【javascript】车标JSON格式--汽车品牌JSON格式
  20. Java面试题 基本类型和包装类对象使用 == 和 equals进行比较的结果?

热门文章

  1. ffmpeg使用说明书
  2. 通信系列2: 深入浅出SIP协议
  3. 列线图实现预测模型可视化
  4. mm,mil,inch,um的转换关系
  5. Reed-Solomon纠错码(RS码)(里德-所罗门码)
  6. html 菜鸟驿站,菜鸟驿站
  7. 风尚云网学习-css实现文字超出隐藏为省略号...
  8. maven配置smartupload_用jspsmartupload实现Jsp多文件上传下载,并解...
  9. GeoNet: Deep Geodesic Networks for Point Cloud Analysis
  10. 最热BMS可直接下载!!