Oracle自定义脱敏函数的代码详解

作者:九命猫幺 时间:2024-01-26 17:33:46 

对于信息安全有要求的,在数据下发和同步过程中需要对含有用户身份信息的敏感字段脱敏,包括用户姓名、证件号、地址等等,下面是自定义函数的代码


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自定义脱敏函数的代码详解,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

来源:https://www.cnblogs.com/yongestcat/archive/2019/07/26/11250586.html

标签:oracle,脱敏,函数
0
投稿

猜你喜欢

  • tensorflow学习笔记之简单的神经网络训练和测试

    2021-02-18 20:28:14
  • Python中的getopt函数使用详解

    2023-04-07 03:08:00
  • 使用Python的Scrapy框架十分钟爬取美女图

    2023-06-16 03:28:57
  • 利用SQL Server触发器实现表的历史修改痕迹记录

    2024-01-19 18:06:42
  • PHP获取网页标题的3种实现方法代码实例

    2024-05-03 15:51:06
  • Python使用Tkinter实现机器人走迷宫

    2022-12-18 16:49:51
  • Python 标准库 fileinput与文件迭代器

    2023-10-31 22:36:50
  • Python GUI布局尺寸适配方法

    2022-03-07 05:52:26
  • Python3安装tensorflow及配置过程

    2021-04-07 01:47:09
  • FastApi如何快速构建一个web项目的实现

    2022-06-29 07:24:10
  • 浅谈购物类网站如何保持视觉设计的一致性

    2009-03-30 16:02:00
  • 写一个简单的bat脚本执行php文件

    2024-03-07 09:18:12
  • 极力推荐10个短小实用的JavaScript代码段

    2024-06-05 09:12:40
  • 对Python subprocess.Popen子进程管道阻塞详解

    2022-10-30 07:59:49
  • 学习Python中一些实用的库

    2022-11-02 13:55:56
  • 在SQL 2005中实现循环每一行做一定的操作

    2009-03-05 14:57:00
  • Python中用于去除空格的三个函数的使用小结

    2022-02-07 23:43:45
  • python的Template使用指南

    2023-10-14 01:30:58
  • Python3的socket使用方法详解

    2021-11-08 13:27:48
  • 微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能

    2024-04-18 10:03:54
  • asp之家 网络编程 m.aspxhome.com