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

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

熱門標(biāo)簽:地圖標(biāo)注效果的制作 網(wǎng)貸外呼系統(tǒng)合法嗎 地圖標(biāo)注坐標(biāo)圖標(biāo) 手機地圖標(biāo)注門店 汽車4s店百度地圖標(biāo)注店 杭州網(wǎng)絡(luò)外呼系統(tǒng)運營商 電銷套路機器人 安陽企業(yè)電銷機器人供應(yīng)商 鶴壁電話機器人價格

對于信息安全有要求的,在數(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)鍵詞  Oracle,自定義,脫敏,函數(shù),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Oracle自定義脫敏函數(shù)的代碼詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于Oracle自定義脫敏函數(shù)的代碼詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章