Oracle自定義脫敏函式

2022-02-05 11:25:09 字數 2985 閱讀 5758

對於資訊保安有要求的,在資料下發和同步過程中需要對含有使用者身份資訊的敏感字段脫敏,包括使用者姓名、證件號、位址等等,下面是自定義函式的**

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 :聯絡**

5 :接入號碼

***/

begin

v_str_length := length(in_str);

v_n := 0;

if v_str_length=0 then

return(null);

end if;

/**********名稱和位址脫敏規則**********/

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;

/**********證件脫敏規則**********/

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;

/**********銀行賬號脫敏規則**********/

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;

/**********聯絡**脫敏規則**********/

if in_type = 4 then

v_name := substr(in_str, 0, v_str_length - 4) || '****';

return(v_name);

end if;

/**********接入號碼脫敏規則**********/

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;

Oracle自定義函式

語法如下 create or replace function function name argment type,argment type return return type 返回資料的型別 變數的申明,比如 stryuan varchar2 150 begin function body 函...

oracle 自定義函式

下面是乙個前輩寫的判斷是否是手機號的函式 create or replace function ismobile pmsg varchar2 return number isvprefix varchar2 20 vlen number begin vlen lengthb pmsg if vlen...

Oracle自定義函式

二 刪除自定義函式 三 應用經驗 在oracle資料庫中,為了實現特定的功能,可以自定義函式,就像c c 語言,除了系統的庫函式,程式設計師還會編寫很多自定義的函式。create or replace function 函式名 引數1 模式 資料型別,return 資料型別 as 定義區域性變數。變...