• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Oracle自定义脱敏函数的代码详解

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

    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自定义脱敏函数的代码详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    您可能感兴趣的文章:
    • Oracle用decode函数或CASE-WHEN实现自定义排序
    • 使用Python脚本zabbix自定义key监控oracle连接状态
    • Oracle 自定义split 函数实例详解
    • ORACLE实现自定义序列号生成的方法
    • 详解Oracle自定义异常示例
    • Oracle将查询的结果放入一张自定义表中并再查询数据
    • oracle异常(预定义异常,自定义异常)应用介绍
    • Oracle用户自定义异常实现过程解析
    上一篇:Oracle使用MyBatis中RowBounds实现分页查询功能
    下一篇:oracle查询截至到当前日期月份所在年份的所有月份
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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