Oracle函數擷取IDCARD中年齡

來源:互聯網
上載者:User

標籤:年齡   oracle   函數   

   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,FalseCREATE 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,FalseCREATE 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 ISIDCARDLEN 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這三個字要當做敏感資訊被過濾掉了呢)

本文出自 “腳踏實地,仰望星空” 部落格,請務必保留此出處http://xubcing.blog.51cto.com/3502962/1596182

Oracle函數擷取IDCARD中年齡

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.