Oracle函数获取IDCARD中年龄

IDCARD的第一代是15位号码,第二代是18位号码,

新的18位IDCARD号码各位的含义:1-2位省、自治区、直辖市代码

3-4位地级市、盟、自治州代码

5-6位县、县级市、区代码

7-14位出生年月日,比如19670401代表1967年4月1日

15-17位为顺序号,其中17位男为单数,女为双数

18位为校验码,0-9和X,由公式随机产生。

15位IDCARD号码各位的含义: 1-2位省、自治区、直辖市代码;

3-4位地级市、盟、自治州代码;

5-6位县、县级市、区代码;

7-12位出生年月日,比如670401代表1967年4月1日,这是和18位号码的第一个区别;

13-15位为顺序号,其中15位男为单数,女为双数

与18位***号的第二个区别:没有最后一位的验证码

从IDCARD中获取用户年龄信息,要对IDCARD合法性进行校验。

--判断是否为数字,返回True,False
CREATE OR REPLACE FUNCTION DT_ISNUMBER(P_IN VARCHAR2) RETURN BOOLEAN AS
  I NUMBER ;
BEGIN
  I := TO_NUMBER(P_IN);
  RETURN TRUE;
EXCEPTION
  WHEN OTHERS THEN
    RETURN FALSE;
END;

--判断是否为日期,返回True,False
CREATE OR REPLACE FUNCTION DT_ISDATE(P_IN VARCHAR2) RETURN BOOLEAN AS
  I DATE;
BEGIN
  I := TO_DATE(P_IN,‘YYYYMMDD‘);
  RETURN TRUE;
EXCEPTION
  WHEN OTHERS THEN
    RETURN FALSE;
END;

--判断是否为合法的***号
CREATE OR REPLACE FUNCTION DT_ISIDCARD(P_IDCARD VARCHAR2) RETURN BOOLEAN IS
  IDCARDLEN INTEGER;
BEGIN
  IDCARDLEN := LENGTH(P_IDCARD);
  IF (IDCARDLEN = 18 AND DT_ISNUMBER(SUBSTR(P_IDCARD, 1, IDCARDLEN - 1)) AND
     DT_ISDATE(SUBSTR(P_IDCARD, 7, 8)) ) OR
     (IDCARDLEN = 15 AND DT_ISNUMBER(SUBSTR(P_IDCARD, 1, IDCARDLEN)) AND
     DT_ISDATE(‘19‘ || SUBSTR(P_IDCARD, 7, 6)) ) THEN
    RETURN TRUE;  
  ELSE
    RETURN FALSE;
  END IF;
END DT_ISIDCARD;

--获取***号信息的年龄并返回
CREATE OR REPLACE FUNCTION DT_GETAGE(P_IDCARD VARCHAR2) RETURN INTEGER IS
IDCARDLEN INTEGER;
IDCARDYEAR INTEGER;
BEGIN 
  IDCARDLEN :=LENGTH(P_IDCARD);  
   IF DT_ISIDCARD(P_IDCARD) AND IDCARDLEN = 18 THEN
     IDCARDYEAR := TO_NUMBER(SUBSTR(P_IDCARD,7,4));  
  END IF;
  IF DT_ISIDCARD(P_IDCARD) AND IDCARDLEN = 15 THEN  
     IDCARDYEAR := TO_NUMBER(‘19‘||SUBSTR(P_IDCARD,7,2));
  END IF;
  RETURN  TO_NUMBER(TO_CHAR(SYSDATE,‘YYYY‘))-IDCARDYEAR;       
END DT_GETAGE;

以上针对***年龄获取常用函数做个记录,方便日后直接使用或者对***中其他地址、性别做进一步解析使用

(PS:为啥shenfenzheng这三个字要当做敏感信息被过滤掉了呢)

时间: 2024-11-02 23:01:24

Oracle函数获取IDCARD中年龄的相关文章

oracle函数获取汉字拼音的首字母

CREATE OR REPLACE FUNCTION F_TRANS_PINYIN_CAPITAL(P_NAME IN VARCHAR2) RETURN VARCHAR2 AS V_COMPARE VARCHAR2(100); V_RETURN VARCHAR2(4000); FUNCTION F_NLSSORT(P_WORD IN VARCHAR2) RETURN VARCHAR2 AS BEGIN RETURN NLSSORT(P_WORD, 'NLS_SORT=SCHINESE_PINYI

oracle存储过程---获取数据库中到指定经纬度距离的坐标

新项目需求: 结合百度地图,在地图中指定一个地点,获取此地点周围1km范围内所有数据库中存的单位的地点和信息标记在地图上.于是初写了一把oracle的存储过程,纯靠摸索写的. 后台需要的函数如下: 首先,计算圆弧函数 CREATE OR REPLACE FUNCTION RAD(d number) RETURN NUMBER is PI number :=3.141592625; begin return  d* PI/180.0; end ; 然后,计算距离函数 CREATE OR REPLA

Oracle函数(更新中)

1,case when用法 从表中根据时间点不同查询出活动的状态. select t.*,(case when (t.start_date <= sysdate and t.end_date >= sysdate)then '报名中' when t.fw_date_z < sysdate then '已结束' when (t.fw_date <= sysdate and t.fw_date_z >= sysdate)then '进行中' when (t.fw_date_z i

Excel中使用MID函数获取身份证中的出生年月日

MID字符串函数,作用是从一个字符串中截取出指定数量的字符 MID(text, start_num, num_chars)   text被截取的字符 start_num从左起第几位开始截取(用数字表达)   num_chars从左起向右截取的长度是多少(用数字表达) 此例子是提取身份证号码中的出生年月日. A1单元格为522222199009091010 在B1单元格输入公式 =MID(A1,7,8) 被截取的字符串为A1单元格,从第七位开始向右截取8个数字. 得到出生年月日: 19900909

Js 利用正则表达式和replace函数获取string中所有被匹配到的文本

js的replace函数除了替换文本以外还有获取所有被正则表达式匹配到的文本的功能.这里以一个简单的案例来作为演示. 利用正则查找出所有被两个花括号包裹的字符串: var str = <div class="item">{{test}}{{aaa}}{{bbb}}</div> str.replace(reg,function (match,param,offset,string) { console.log(match,param,offset,string);

php -- PHP5中file_get_contents函数获取带BOM的utf-8文件内容

最近,在用file_get_contents函数来取得文本的内容的时候,出现了一个情况(如下),苦思冥想了n久,不得其解,最后,果然还是得靠百度啊..... 百度到一个解释,下面是原文: PHP5中的file_get_contents函数获取文件内容,实际是按二进制来读取的,所以,当你用file_get_contents去获取一个带BOM的UTF-8文件时,它并不会把UTF-8的BOM去掉,当你把读取 的内容当作文本内容来进行一些操作时,可能会发生一些意想不到的结果.这并不能算作一个BUG,因为

Oracle数据库获取uuid函数

Oracle新建系统表时,要求主键为32位uuid,猜测Oracle肯定会提供相关的函数. 翻阅相关文档,果然发现Oracle提供的函数 sys_guid() 用于获取32位uuid,简单使用为 select sys_guid() from dual; 该函数返回32位的uuid为大写,可以使用 lower(sys_guid()) 转为小写. Oracle数据库获取uuid函数

全选全不选,返回字符串长度,汉字计数为2,获取url中的参数 ,函数防抖,函数节流

/* 全选/全不选 */ function selectAll(objSelect) { if (objSelect.checked == true) { $("input[name='chkId']").attr("checked", true); $("input[name='chkAll']").attr("checked", true); } else if (objSelect.checked == false) {

oracle 函数的用法(三)

-- 函数 1.oracle自带的标准函数 to_date,to_number2.自定义函数 -- 自定义函数语法 1 CREATE OR REPLACE FUNCTION FUNCTION_name 2 [ (PARAMETERS [MODEL] datatype ... ) ] 3 RETURN datatype IS|AS 4 [local_variable_declarations ; ...] 5 BEGIN 6 -- action; 7 RETURN expression; 8 EN