佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > Oracle自定義脫敏函數(shù)的代碼詳解

Oracle自定義脫敏函數(shù)的代碼詳解

熱門標(biāo)簽:鐵路電話系統(tǒng) 地方門戶網(wǎng)站 AI電銷 百度競價排名 服務(wù)外包 Linux服務(wù)器 網(wǎng)站排名優(yōu)化 呼叫中心市場需求

對于信息安全有要求的,在數(shù)據(jù)下發(fā)和同步過程中需要對含有用戶身份信息的敏感字段脫敏,包括用戶姓名、證件號、地址等等,下面是自定義函數(shù)的代碼

CREATE OR REPLACE FUNCTION F_GET_SENSITIVE(IN_STR VARCHAR, IN_TYPE NUMBER)
 RETURN VARCHAR2 IS
 V_STR_LENGTH NUMBER;
 V_NAME    VARCHAR2(1000);
 V_N     NUMBER;
 V_HID    VARCHAR2(200);
 V_SQL    VARCHAR2(200);
 V_NUM_FLAG  NUMBER;
 /****
 N_TYPE 脫敏字段類型
 1 :名稱
 11:地址
 2 :證件
 3 :銀行賬號
 4 :聯(lián)系電話
 5 :接入號碼
 ***/
BEGIN
 V_STR_LENGTH := LENGTH(IN_STR);
 V_N     := 0;
 IF V_STR_LENGTH=0 THEN
   RETURN(NULL);
 END IF;
 /**********名稱和地址脫敏規(guī)則**********/
 IF IN_TYPE = 1 OR IN_TYPE=11 THEN
  IF V_STR_LENGTH = 2 OR V_STR_LENGTH = 3 THEN
   V_NAME := REGEXP_REPLACE(IN_STR, '(.)', '*', 2, 1);
  ELSIF V_STR_LENGTH  2 THEN
   V_NAME :=IN_STR;
  ELSE
   WHILE V_N  V_STR_LENGTH / 2 LOOP
    V_N  := V_N + 1;
    V_HID := V_HID || '*';
   END LOOP;
   V_NAME := SUBSTR(IN_STR, 0, V_STR_LENGTH / 2) || V_HID;
  END IF;
  RETURN(V_NAME);
 END IF;
 /**********證件脫敏規(guī)則**********/
 IF IN_TYPE = 2 THEN
  IF V_STR_LENGTH = 15 THEN
   V_NAME := SUBSTR(IN_STR, 0, 6) || '******' || SUBSTR(IN_STR, -3, 3);
  ELSIF V_STR_LENGTH = 18 THEN
   V_NAME := SUBSTR(IN_STR, 0, 6) || '********' || SUBSTR(IN_STR, -4, 4);
  ELSE
   WHILE V_N  V_STR_LENGTH / 3 LOOP
    V_N  := V_N + 1;
    V_HID := V_HID || '*';
   END LOOP;
   V_NAME := SUBSTR(IN_STR, 0, V_STR_LENGTH / 3) || V_HID ||
        SUBSTR(IN_STR, -V_STR_LENGTH / 3, V_STR_LENGTH / 3);
  END IF;
  RETURN(V_NAME);
 END IF;
 /**********銀行賬號脫敏規(guī)則**********/
 IF IN_TYPE = 3 THEN
  IF V_STR_LENGTH > 15 THEN
   V_NAME := SUBSTR(IN_STR, 0, 4) || '********' || SUBSTR(IN_STR, -4, 4);
  ELSE
   V_NAME :=IN_STR;
  END IF;
   RETURN(V_NAME);
 END IF;
 /**********聯(lián)系電話脫敏規(guī)則**********/
 IF IN_TYPE = 4 THEN
  V_NAME := SUBSTR(IN_STR, 0, V_STR_LENGTH - 4) || '****';
  RETURN(V_NAME);
 END IF;
 /**********接入號碼脫敏規(guī)則**********/
 IF IN_TYPE = 5 THEN
  V_SQL := 'SELECT COUNT(1) FROM DUAL WHERE LENGTH(''' || IN_STR ||
       ''') = LENGTH(REGEXP_REPLACE(''' || IN_STR || ''', ''[^0-9]''))';
  EXECUTE IMMEDIATE V_SQL
   INTO V_NUM_FLAG;
  IF V_NUM_FLAG = 1 AND (V_STR_LENGTH = 7 OR V_STR_LENGTH = 8) THEN
   V_NAME := SUBSTR(IN_STR, 0, 2) || '****' || SUBSTR(IN_STR, -2, 2);
  ELSIF V_NUM_FLAG = 1 AND V_STR_LENGTH = 11 THEN
   V_NAME := SUBSTR(IN_STR, 0, 3) || '*****' || SUBSTR(IN_STR, -3, 3);
  ELSE
   V_NAME := IN_STR;
  END IF;
   RETURN(V_NAME);
 END IF;
 RETURN(IN_STR);
EXCEPTION
 WHEN OTHERS THEN
  -- DBMS_OUTPUT.PUT_LINE('1'||V_SQL);
  V_NAME := '-1';
  RETURN V_NAME;
END F_GET_SENSITIVE;

總結(jié)

以上所述是小編給大家介紹的Oracle自定義脫敏函數(shù)的代碼詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

您可能感興趣的文章:
  • Oracle用decode函數(shù)或CASE-WHEN實現(xiàn)自定義排序
  • 使用Python腳本zabbix自定義key監(jiān)控oracle連接狀態(tài)
  • Oracle 自定義split 函數(shù)實例詳解
  • ORACLE實現(xiàn)自定義序列號生成的方法
  • 詳解Oracle自定義異常示例
  • Oracle將查詢的結(jié)果放入一張自定義表中并再查詢數(shù)據(jù)
  • oracle異常(預(yù)定義異常,自定義異常)應(yīng)用介紹
  • Oracle用戶自定義異常實現(xiàn)過程解析

標(biāo)簽:湖南 崇左 仙桃 黃山 衡水 湘潭 蘭州 銅川

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Oracle自定義脫敏函數(shù)的代碼詳解》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    河池市| 永康市| 集安市| 奉节县| 宿松县| 张掖市| 藁城市| 仙桃市| 潮安县| 三原县| 日土县| 邮箱| 新安县| 云浮市| 清流县| 葫芦岛市| 郧西县| 桃园县| 株洲市| 遵义市| 延津县| 日土县| 成武县| 广昌县| 策勒县| 科尔| 沂水县| 华安县| 大姚县| 蕲春县| 平山县| 台南市| 河北省| 武隆县| 克什克腾旗| 淮北市| 丰城市| 常宁市| 颍上县| 方正县| 东乌珠穆沁旗|