mysql对身份证号进行脱敏处理

一、数据脱敏解释

在日常开发需求中会经常遇到数据脱敏处理,比如身份证号、手机号,需要使用*进行部分替换显示。这样能使敏感隐私信息在一定程度上得到保护。那么什么是数据脱敏呢?

在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏。

二、数据脱敏实现

数据脱敏实现可以从数据库查数据的时候进行处理,可以在查出数据后进行处理。在这里记录了MySQL数据库查询时处理,通过使用mysql字符串函数实现。

三、实现

首先执行SQL语句:


  • 1

MySQL数据脱敏实现

1. CONCAT()、LEFT()和RIGHT()字符串函数组合使用
  • CONCAT(str1,str2,…):返回结果为连接参数产生的字符串
  • LEFT(str,len):返回从字符串str 开始的len 最左字符
  • RIGHT(str,len):从字符串str 开始,返回最右len 字符

    执行SQL语句:

SELECT 
    CONCAT(LEFT(IdentityCardNo,3), '****' ,RIGHT(IdentityCardNo,4)) AS 身份证号
FROM c_inhabitantinfo;
  • 1
  • 2
  • 3


2.INSERT()
  • INSERT(str,pos,len,newstr):返回字符串 str, 其子字符串起始于 pos 位置和长期被字符串 newstr取代的len 字符

    执行SQL语句:

SELECT INSERT(IdentityCardNo, 4, 11, '****') AS 身份证号 FROM c_inhabitantinfo;

四、脚本方法

DELIMITER $$
CREATE  FUNCTION `f_get_rand_number`(p_size int) RETURNS int(20)
    COMMENT '取参数传入长度的随机数'
BEGIN
 -- select f_get_rand_number(4) ; -- 1699
DECLARE v_rand_number int(20);
DECLARE v_multiplier int;
if p_size>20 then
set p_size = 20;
end if;
set v_multiplier=RPAD('1',p_size,'0');
SELECT ROUND(RAND() * v_multiplier + v_multiplier) INTO v_rand_number;


RETURN v_rand_number;
END
DELIMITER;DELIMITER



CREATE  FUNCTION `f_padding_str`(p_original varchar(200),p_index int ,p_padding_str varchar(1)) RETURNS varchar(200) CHARSET utf8
    COMMENT '数据脱敏 将p_original从p_index位后替换成p_padding_str'
BEGIN
-- select f_padding_str('良好压顶奇才',4,'某'); -- 良好压顶某某
declare v_rtn_str varchar(200);
declare v_len int;
if p_original is null then
return '';
end if;
if char_length(p_original)>200 then
set p_original = substring(p_original,1,200);
end if;
set v_len = char_length(p_original);
set v_rtn_str = RPAD(substring(p_original,1,p_index),v_len,p_padding_str);


RETURN v_rtn_str;
END
DELIMITER;DELIMITER

CREATE  FUNCTION `f_replace_str`(p_original varchar(200),p_index int ,p_size int,p_replace_str varchar(100)) RETURNS varchar(200) CHARSET utf8
    COMMENT '数据脱敏 将p_original从p_index位后p_size长度的字符串替换成p_replace_str'
BEGIN
-- select f_replace_str('12345678',2,3,'bbb'); -- 1bbb5678
-- select f_replace_str('12345678',2,0,'bbb'); -- 1bbb
    -- select f_replace_str('12345678',-2,0,'bbb');-- 123456bbb
    declare v_rtn_str varchar(200);
    declare v_sub_str varchar(100);
    if p_original is null then
return '';
end if;
    if char_length(p_original)>200 then
set p_original = substring(p_original,1,200);
end if;
-- 当p_size为0时,则将p_index后所有字符替换为p_replace_str
    if p_size =0 then
set v_sub_str = substring(p_original,p_index);
    else
set v_sub_str = substring(p_original,p_index,p_size);
    end if;
    set v_rtn_str = replace(p_original,v_sub_str,p_replace_str);
RETURN v_rtn_str;
END$$
DELIMITER ;

五、第三方产品DBMasker

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值