Java 脱敏工具类总结

2023-11-13

开发过程中,会遇到很多敏感数据的显示,这样不太安全,就需要用到相关的脱敏工具进行脱敏之后再显示;

总结部分脱敏工具:

package com.li.info;

import org.apache.commons.lang3.StringUtils;

/**
 * @author user
 * @description: 脱敏工具类
 * @date 2022/5/17
 */
public class DataDesensitizedUtils {
    /**
     * 功能描述:姓名脱敏
     * 脱敏规则:只显示第一个汉字,比如李某某置换为李**, 李某置换为李*
     * @param fullName 完整的姓名
     * @return
     */
    public static String desensitizedName(String fullName) {
        if (StringUtils.isNotBlank(fullName)) {
            String name = StringUtils.left(fullName, 1);
            return StringUtils.rightPad(name, StringUtils.length(fullName), "*");
        }
        return fullName;
    }

    /**
     * 功能描述:手机号脱敏
     * 脱敏规则:保留前三后三, 比如18368158794置换为183*****794
     * @param phoneNumber 手机号
     * @return
     */
    public static String desensitizedPhoneNumber(String phoneNumber) {
        if (StringUtils.isNotBlank(phoneNumber)) {
            phoneNumber = phoneNumber.replaceAll("(\\w{3})\\w*(\\w{3})", "$1*****$2");
        }
        return phoneNumber;
    }

    /**
     * 功能描述:身份证号脱敏
     * 脱敏规则:保留前六后三, 适用于15位和18位身份证号
     * @param idNumber 身份证号
     * @return
     */
    public static String desensitizedIdNumber(String idNumber) {
        if (StringUtils.isNotBlank(idNumber)) {
            return StringUtils.left(idNumber, 6).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(idNumber, 3), StringUtils.length(idNumber), "*"), "******"));
        }
        return idNumber;
    }

    /**
     * 功能描述:地址脱敏
     * 脱敏规则:从第4位开始隐藏,隐藏8位
     *         因地址位数是不确定的,所以结尾长度为总长度减去 前面保留长度和隐藏长度之和 address.length()-11
     * @param address 具体地址
     * @return
     */
    public static String desensitizedAddress(String address) {
        if (StringUtils.isNotBlank(address)) {
            return StringUtils.left(address, 3).concat(StringUtils.removeStart(StringUtils.leftPad(StringUtils.right(address, address.length() - 11), StringUtils.length(address), "*"), "***"));
        }
        return address;
    }

    //测试示例
    public static void main(String[] args) {
        System.out.println(desensitizedName("张三"));
        System.out.println(desensitizedPhoneNumber("18368158794"));
        System.out.println(desensitizedIdNumber("123456789098765423"));
        System.out.println(desensitizedAddress("浙江省杭州市西湖区翠苑街道"));
    }
}

测试结果如下:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 脱敏工具类总结 的相关文章

  • 获取对 JOptionPane 静态方法创建的对象的引用

    我想知道是否可以获取对由 JOptionPane 的静态方法之一 例如 showMessageDialog 创建的 JDialog 对象的引用 我打算修改对话框在屏幕上出现的位置 更具体地说 我希望对话框默认显示在主应用程序窗口的左上角 而
  • 连接 Netbeans 和 MySQL 但出现大整数错误

    所以我正在尝试向我的 Netbeans 数据库 即 MySQL 添加新连接 但我遇到了大整数转换错误 有人可以帮助我吗 详细地 我右键单击现有的MySQL 服务器位于 localhost 3306 root 已断开连接 gt gt 选择co
  • 给定“java.sql.SQLIntegrityConstraintViolationException”是否可以确定错误的列

    鉴于我有一个类型为 java sql SQLIntegrityConstraintViolationException 的异常 是否可以以编程方式确定错误的列 或多列 我问这个问题是因为我想将错误映射回客户端的数据模型以指示错误的字段 例如
  • UnknownHostException:名称或服务未知

    我正在尝试使用 com squareup okhttp 中的 OkHttpClient 从 API 返回一些数据 我遇到了一些错误 我最终能够克服这些错误 但我无法克服这个主机异常错误 并且这里似乎没有任何内容足够具体到我的情况能够解决 下
  • 为什么签名的 Android apk 无法在模拟器上运行

    我已经制作了一个android项目的签名apk 每当我的客户尝试在模拟器上运行它时 他都会遇到以下错误消息 D Android android sdk windows tools gt adb install r abc apk 500 K
  • 何时在java中使用get/set方法[重复]

    这个问题在这里已经有答案了 我想知道何时在我的类中使用 get 和 set 方法 getName setName 以及何时简单classVariable name 反而 classVariable getName 这是使用 set 和 ge
  • 在 Java 中对多语言环境字符串进行排序

    我正在尝试按字符串字段 国家 地区 对对象列表进行排序 每个国家 地区都使用其母语 阿根廷 澳大利亚 奥地利 例如 我想要做的是让 出现在 A 国家之后 因为字母 对应于拉丁语 B 我正在尝试使用默认的 Collat er 但非拉丁名称仍然
  • 使用 GIN 注入 Class

    有没有办法注入类类型Class
  • 从 Java 中的泛型类型推断泛型类型(编译时错误)

    我有一个带有以下泛型类型签名的静态函数T public static
  • 使用pdfbox从pdf中提取图像

    我正在尝试使用 pdfbox 从 pdf 中提取图像 示例 pdfhere http www ignou ac in upload questionpaper CS 74 PDF 但我只得到空白图像 我正在尝试的代码 public stat
  • RecyclerView onItemClickListener 不工作

    我正在研究回收视图并尝试对 recyclerview 的每个项目使用点击侦听器界面 这是我的活动课程 public class LegacyHomeActivity extends ActivityBaseDrawer private Li
  • Android-如何在指定时间后台下载数据

    我提前很抱歉没有发布任何代码 主要是因为我一生都无法弄清楚我需要如何做我需要做的事情 基本上 在一天中的指定时间间隔 例如下午 5 点 我希望我的应用程序从我的服务器下载一些数据并将其存储在设备上 这是为了减少每次运行应用程序时下载数据对我
  • IntelliJ IDEA:忽略代码覆盖率中的琐碎方法

    在 IntelliJ IDEA 15 0 2 中 如何在测试覆盖率测量期间忽略琐碎的 getter 和 setter 琐碎方法 should be measure public void complex fancy interesting
  • 使用 Arrays.copyOf 复制不同类型的数组时出现问题

    我正在尝试创建一个方法 该方法几乎将任何内容作为参数 并返回带有某些分隔符的值的串联字符串表示形式 public static String getConcatenated char delim Object names String st
  • 在java中的super调用之前创建一个对象

    考虑到简单的java代码是行不通的 public class Bar extends AbstractBar private final Foo foo new Foo bar public Bar super foo 我需要在之前创建一个
  • 将文件内容存储到数组中

    我的刽子手程序有问题 我真的认为我需要做的事情超出了我对java的理解 这是我的代码 import java io BufferedReader import java io FileReader import java io FileNo
  • 注意通知持续时间

    是否可以将抬头通知的持续时间设置为无限 现在它只显示 5 秒 已经尝试过不同的事情 例如更改类别 但持续时间始终为 5 秒 这是我的代码 Notification notification notificationBuilder setCa
  • javaFX,抛出 NullPointerException,位置是必需的

    我看过其他答案 但没有任何帮助我 抱歉 GUI新手只知道swing的基础知识 这是主课 package application import javafx application Application import javafx fxml
  • JVM 调试端口 7779 正在使用

    我正在使用 RAD 8 当我在调试模式下启动服务器时 它会显示一条错误消息 指出JVM debug port 7779 is in use 我多次遇到这个问题 因为我知道 RAD 使用了这个端口 所以我不得不停止这个过程窗口任务管理器 gt
  • Eclipse IDE - 错误:构建路径指定执行环境 Java SE 1.7

    在 Eclipse 中 我收到一个错误 构建路径指定执行环境Java SE 1 7 工作区中没有安装与此环境严格兼容的 JRE 尝试这个 In Eclipse your project gt properties gt java build

随机推荐

  • gradle 添加构建依赖项

    gradle 添加构建依赖项 参考 添加构建依赖项 利用 Android Studio 中的 Gradle 构建系统 您可以轻松地将外部二进制文件或其他库模块作为依赖项添加到您的 build 中 这些依赖项可位于您的计算机上或远程代码库中
  • prometheus监控示例

    prometheus架构图 prometheus 各组件介绍 Prometheus Server 使用pull方式采集监控数据 在该组件上配置监控数据的采集和告警规则 Client Library 客户端库 为需要监控的服务生成相应的 me
  • 安装Redhat

    1 新建虚拟机 选典型 2 下一步 选择稍后安装操作系统 3 下一步 选择Linux 版本选择Red Hat Enterprise 8 版本是什么就选择什么 4 下一步 设置虚拟机名称以及位置 5 下一步 设置虚拟机磁盘容量 6 下一步 点
  • RocketMQ第五篇 RocketMQ API基本使用

    目录 生产者Product 消费者Consumer 前面已经学习了Rocket的基本知识 以及搭建MQ单机版和集群环境 下面开始进行实际开发 根据前面下载的RocketMQ源码 开展讲解RocketMQ 的基本使用 生产者Product 在
  • Python实战

    转载自Python研究者 作者阿辰 今天教大家如何爬取新浪网新闻数据 通过词云可视化展示新闻关键词 快速了解最新的新闻热点 这里爬取了2500条新闻数据进行演示 PS 这里采集的主要是国内最新新闻数据 写这篇文章的时候是4月26号 所以获取
  • 解决Spring的UnsatisfiedDependencyException异常的方法

    解决Spring的UnsatisfiedDependencyException异常的方法 1 引言 在使用Spring框架进行开发时 经常会遇到UnsatisfiedDependencyException异常 这个异常通常是由于依赖注入失败
  • 僵尸进程的查找及僵尸进程的kill

    首先我们来看看什么是僵尸进程 之前的学习过程中时这样理解僵尸进程的 子进程先于父进程退出 并将退出原因保留在pcb中 因此退出后不会自动释放所有资源 子进程退出后操作系统会通知父进程子进程退出了 你去获取一下原因 再完全释放子进程资源 若父
  • 软件测试基础知识(7)——因果图法

    因果图法 定义 因果图法是一种利用图解法分析输入的各种组合情况 从而设计测试用例的方法 它适合于检查程序输入条件的各种组合情况 特点 1 考虑输入条件的相互制约及组合关系 2 考虑输出条件对输入条件的制约关系 因果图法产生的背景 等价类划分
  • 高可用集群HA、LVS+Keepalived、健康检测

    keepalived是集群管理中保证集群高可用 HA 的一个服务软件 其功能类似于heartbeat 用来防止单点故障 2 工作原理 keepalived是以VRRP协议为实现基础的 当backup收不到vrrp包时就认为master宕掉了
  • 快速排序c++实现

    思想 用过一趟排序将要排序的数据分割成独立的两部分 其中一部分的所有数据都比另外一部分的所有数据要小 然后再对这两部分重复此步骤 直到整个数组变成有序序列 对一个数组实现一趟快速排序的过程 1 定义两个变量 一个指向数组最前 一个指向最后
  • uniapp开发的scroll-view的x轴滑动两端不能够完全显示的修改

    uniapp开发多端应用 做一个scroll view后 在h5可以完全显示 app也可以 就是在小程序端两侧都不能够完全显示 把官方简单的示例代码复制下来调试 发现问题在于scroll view层的class的width 如果设置成100
  • HC-05(ZS-040)蓝牙模块使用详情(蓝牙模块配置、手机蓝牙控制单片机、蓝牙与蓝牙之间的通信)含51、32程序

    HC 05是一款主从一体化的蓝牙模块 因此其使用起来比较方便 只需要进行简单的配置即可 本文就手把手的介绍小白入手模块后如何使用 对于模块使用 1 蓝牙配置 2 手机与蓝牙的传输 3 手机通过蓝牙模块控制单片机 4 一对蓝牙之间主 从传输数
  • java随机抽题系统_随机抽取试题(java+sql 2005)

    import java awt BorderLayout import java util import java awt event import java awt Container import java awt EventQueue
  • 强啊,点赞业务缓存设计优化探索之路。

    背景 内容点赞业务在得物社区中是一个非常高频的业务场景 功能本身复杂度不高 但是业务场景多 QPS高 而且由于社区的用户体量 整体点赞的数据量非常大 其中最核心 对响应性能要求最高的主要是 用户是否点赞内容 和 内容点赞数 场景 在得物社区
  • fgets 函数详解

    描述 C 库函数 char fgets char str int n FILE stream 从指定的流 stream 读取一行 并把它存储在 str 所指向的字符串内 当读取 n 1 个字符时 或者读取到换行符时 或者到达文件末尾时 它会
  • PID ------------------------------------

    28条消息 位置式PID和增量式PID的区别 转载 zhangfengmei1987的博客 CSDN博客 位置式pid 28条消息 自动驾驶 PID实现轨迹跟踪 python实现 C 实现 CHH3213的博客 CSDN博客 轨迹跟踪 P
  • webpack 插件实战笔记(一)

    cnpm init 111Air webpackSerial1 i cnpm init This utility will walk you through creating a package json file It only cove
  • FCOS代码复现错误集合

    在我复现无锚框检测神网络 FCOS时 官方代码 FCOS master令我头疼不已 现将问题总结如下 仅供参考 1 from fcos core import C 遇到这个问题抓耳挠腮了好久 尝试过各种方法 最后不得已 在文件所在目录下重新
  • 图像处理中涉及的灰度图、彩色图以及深度图概念

    图像处理中涉及最多的概念就是图像的类型 为了很好的理解图像的概念以及处理图片 我们就需要对常见的图像具有一定的概念 我们首先介绍一下生活中常见的图像格式 1 bmp格式 这是一种不常见的图像格式 一般为无损图像 没有对图像进行压缩 占用的存
  • Java 脱敏工具类总结

    开发过程中 会遇到很多敏感数据的显示 这样不太安全 就需要用到相关的脱敏工具进行脱敏之后再显示 总结部分脱敏工具 package com li info import org apache commons lang3 StringUtils