目录
要求
用数据库function实现数据处理
- 身分证字号:开发环境(DEV)至少遮5-8字符byte,使用者测试(UAT)环境之假资料若由测试单位自行编造输入可不遮。
- 姓名(客户之姓名、英文姓名、紧急联络人、代理人):中文至少遮第二中文字,英文至少遮第3-4字符(byte)。
- 地址:第七字(14 byte)起屏蔽。
- 出生年月日:随机数加减五十天,随机数不可取用0。如计算需要时,得不遮。
- 银行(邮局账号):至少遮第6-8字符 (byte)。账号栏位存入数据库时,需要先做转码处理,加密算法采用DES.
- 信用卡号:至少遮第7-12字符 (byte)。卡号栏位存入数据库时,需要先做转码处理,加密算法采用DES.
- 电话:至少遮第6-8字符 (byte)。
- 电子邮件:至少遮第2-5字符 (byte)。
- 保单号码:至少遮第5-8字符 (byte)。
- 放款账号:至少遮第5-8字符 (byte)。
- 职业(服务机构、职务):屏蔽后2位字符(byte)
- 健康类(指纹、病历、医疗、基因、性生活、健康检查等):屏蔽不显示原始资料,使用屏蔽的字符替换原始资料。
- 家庭类(婚姻、家庭、教育):屏蔽不显示原始资料,使用屏蔽的字符替换原始资料。
- 犯罪前科、社会活动:屏蔽不显示原始资料,使用屏蔽的字符替换原始资料。
实现
之前写过身份证的,这次看大部分大同小异。先分类
- 替换字符:1.2.3.7.8.9.10.11.
- 替换+加密:5,6
- 屏蔽全部替换:12.13.14.
- 待定:4.
create or replace function fIdNum(id varchar2)
return varchar2
is
Result varchar2(20);
begin
select replace(id,substr(id,5,length(id)-8),'*') into Result from dual;
return(Result);
end fIdNum;
--验证
select fIdNum('111111222222223333') from dual
2.姓名
create or replace function fName(name varchar2)
return varchar2
is
Result varchar2(20);
begin
if lengthb(name)=length(name) then
select regexp_replace(name,'\w','*',3)into Result from dual;
return(Result);
else
select regexp_replace(name,'[^\x00-\xff]','*',2)into Result from dual;
return(Result);
end if;
end fName;
--验证
select fName('马大姐') from dual
3.地址
create or replace function fAddress(address varchar2)
return varchar2
is
Result varchar2(20);
begin
select replace(address,substr(address,7),'*') into Result from dual;
return(Result);
end fAddress;
--验证
select fIdNum('一二三四五六七八九十十一') from dual
4.出生年月日
待定,因为有别的任务,所以这个先搁置了
5.6.des加密,解密
create or replace function
encrypt_des(p_text varchar2, p_key varchar2) return varchar2 is
v_text varchar2(4000);
v_enc varchar2(4000);
raw_input RAW(128) ;
key_input RAW(128) ;
decrypted_raw RAW(2048);
begin
v_text := rpad( p_text, (trunc(length(p_text)/8)+1)*8, chr(0));
raw_input := UTL_RAW.CAST_TO_RAW(v_text);
key_input := UTL_RAW.CAST_TO_RAW(p_key);
dbms_obfuscation_toolkit.DESEncrypt(input => raw_input,key => key_input,encrypted_data =>decrypted_raw);
v_enc := rawtohex(decrypted_raw);
dbms_output.put_line(v_enc);
return v_enc;
end;
select encrypt_des('dsds','test#5&124*!de') from dual ---加密测试
select decrypt_des('2B1DB64F882C68F9','test#5&124*!de')from dual ----解密测试
update tb_salarysign_staff s set s.staffpwd =encrypt_des(s.staffpwd, 'test#5&124*!de');----对表内列加密-
select decrypt_des(s.staffpwd, 'test#5&124*!de') from tb_salarysign_staff s-----------解密
create or replace function decrypt_des(p_text varchar2,p_key varchar2) return varchar2 is
v_text varchar2(2000);
begin
dbms_obfuscation_toolkit.DESDECRYPT(input_string => UTL_RAW.CAST_TO_varchar2(p_text),key_string =>p_key, decrypted_string=> v_text);
v_text := rtrim(v_text,chr(0));
dbms_output.put_line(v_text);
return v_text;
end;
5.银行账号
create or replace function fBankNum(bankNum varchar2)
return varchar2
is
Result varchar2(20);
begin
select replace(bankNum,substr(bankNum,6,4),'*') into Result from dual;
return(Result);
end fBankNum;
--验证
select fBankNum(1111222233334444) from dual
6.信用卡号
create or replace function fCreditNum(creditNum varchar2)
return varchar2
is
Result varchar2(20);
begin
select replace(creditNum,substr(creditNum,7,5),'*') into Result from dual;
return(Result);
end fCreditNum;
--验证
select fCreditNum('1111222233334444') from dual
7.电话
create or replace function fPhone(phone varchar2)
return varchar2
is
Result varchar2(20);
begin
select replace(phone,substr(phone,4,4),'*') into Result from dual;
return(Result);
end fPhone;
--验证
select fPhone('19834526016') from dual
8.邮件
create or replace function fEmail(email varchar2)
return varchar2
is
Result varchar2(20);
begin
select replace(email,substr(email,2,5),'*') into Result from dual;
return(Result);
end fEmail;
--验证
select fEmail('lining@qq.com') from dual
9.保单
create or replace function fGuarantee(guarantee varchar2)
return varchar2
is
Result varchar2(20);
begin
select replace(guarantee,substr(guarantee,5,4),'*') into Result from dual;
return(Result);
end fGuarantee;
--验证
select fGuarantee('12345678') from dual
10.放款账号
create or replace function fLoanAccount(account varchar2)
return varchar2
is
Result varchar2(20);
begin
select replace(account,substr(account,5,4),'*') into Result from dual;
return(Result);
end fLoanAccount;
--验证
select fLoanAccount('12345678') from dual
11.职业
create or replace function fJob(job varchar2)
return varchar2
is
Result varchar2(20);
begin
select replace(job,substr(job,3),'*') into Result from dual;
return(Result);
end fJob;
--验证
select fJob('美国总统') from dual
12.13.14 健康类,家庭类,犯罪前科,社会活动
create or replace function fHide(msg varchar2)
return varchar2
is
Result varchar2(20);
begin
select replace(msg,substr(msg,1),'*') into Result from dual;
return(Result);
end fHide;
--验证
select fHide('美国总统') from dual