java—手机号脱敏

2023-11-02

Java中手机号脱敏是指将真实手机号码中的一部分数字用特定字符替换,以保护用户的个人信息。通常,手机号码脱敏会将手机号的中间几位或者最后几位替换成特定字符,例如用“*”、"X"或者其他随意选择的字符来代替。

手机号脱敏的目的是防止用户个人信息外泄。在互联网应用中,需要很多场景获取用户的手机号,例如注册、登录、找回密码等操作,这些操作都需要输入手机号进行验证。如果应用程序没有对用户手机号进行脱敏或者其他保护措施,存在泄漏用户手机号的风险,这种风险可能导致用户个人权益的损失。

使用Java实现手机号脱敏可以灵活地适用于各种应用场景和需求,具体实现方法可以根据实际情况选择。

手机号脱敏方法

字符串替换法

通过字符串的替换方法,将手机号码中位数为3至7的数字替换为星号,即可实现手机号的脱敏。

String mobile = "13812345678";
String result = mobile.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
System.out.println(result); // 输出:138****5678

StringBuilder法

使用StringBuilder来构建新的脱敏手机号,可以有效减少内存占用。

String mobile = "13812345678";
StringBuilder sb = new StringBuilder(mobile);
sb.replace(3, 7, "****");
String result = sb.toString();
System.out.println(result); // 输出:138****5678

commons-lang3

在Apache Commons Lang3工具类库中,提供了StringUtils类,其中有一个方法叫做hide方法可以实现手机号码的脱敏。

import org.apache.commons.lang3.StringUtils;

String mobile = "13812345678";
String result = StringUtils.overlay(mobile, "****", 3, 7);
System.out.println(result); // 输出:138****5678

lombok

在Lombok框架中,提供了一个注解@Mask可以用来进行数据脱敏操作。可以通过使用lombok的@Data注解和@Mask注解来实现实体类中某些属性的脱敏操作。

import lombok.Data;
import lombok.experimental.Accessors;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.ToStringSerializer;
import com.alibaba.fastjson.serializer.JSONSerializer;

@Data
@Accessors(chain = true)
public class User {
    private Long id;
    private String name;
    @JSONField(serializeUsing = ToStringSerializer.class) // fastjson对Long类型转为String
    @Mask(prefixNoMaskLen=3, suffixNoMaskLen=4, mask = "*")  // 加这个注解
    private Long mobile;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java—手机号脱敏 的相关文章

  • JSF2.0 中的空白输入字段未设置为 NULL

    我有一个支持 bean 其中 fileld 为 Long Double Integer String 当我没有在输入字段中指定任何内容时 长整型 整数和双精度值将被视为零 而不是空 我正在使用 tomcat 来部署我的应用程序 有什么解决办
  • 如何打印JTable中选定的行

    我尝试使用主 JTable 的选定行和相同的头和单元格渲染来创建临时 JTable 但是当我尝试打印它时 我只得到一个带有线边框的空矩形 我在如何打印 JTable 的特定行 列 https stackoverflow com questi
  • 使用 s:select 标签在下拉菜单中使用 i18n [重复]

    这个问题在这里已经有答案了 我的 JSP 页面中有一个下拉菜单 它是通过
  • 如何从球衣服务端点发送实体列表?

    我正在从球衣服务器发送实体列表 在客户端 我试图获取这些实体列表 但它给了元帅例外 为什么它在元素名末尾添加 s 即 emps 而不是 emp XmlRootElement public class Emp Server side code
  • 内部/匿名类的最佳实践[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 匿名类和静态内部类的最佳实践 设计和性能方面 是什么 就我个人而言 我认为静态内部类提供了更好的封装 并且应该提供更好的性能 因为它们无法访问类
  • 如何确定 JDialog 显示在哪个屏幕上

    我有一个非常大的应用程序 有多个对话框 我的任务是确保不完全可见的对话框 因为用户将其从可见屏幕区域拉出 移回屏幕中心 当我只处理一个屏幕时 这没问题 它工作得很好 但是 该应用程序的大多数用户的桌面上都有两个屏幕 当我尝试找出对话框显示在
  • 带嵌入式 tomcat 的 spring-boot 不会将请求分派到控制器

    我有一个使用 spring boot 和嵌入式 Tomcat 容器的应用程序 据我所知 我的代码与 spring boot 相同示例项目 https github com spring projects spring boot tree m
  • 如何注册 org.springframework.integration.monitor.IntegrationMBeanExporter

    根据http www ibm com support knowledgecenter en SS7K4U 8 5 5 com ibm websphere nd multiplatform doc ae cspr data access tr
  • 如何从 Java 生产代码中删除调试语句

    编译器是否可以从生产代码中删除用于调试目的 例如日志记录 的语句 调试语句需要以某种方式进行标记 可能使用注释 设置属性 debug true 并在每个调试语句中检查它很容易 但这会降低性能 如果编译器能够简单地使调试语句消失 那就太好了
  • Hibernate更新查询问题

    对于此更新查询 update TestDB dbo MyEmp set empname where empid 我在 DAO 课上写的 MyEmployee myEmployee new MyEmployee MyEmployee myEm
  • 是否有适用于 Java 的 CalDAV 客户端库? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我想使用 CalDAV 协议与我的日
  • java内存不足然后退出

    我有一个必须分析大文件的软件 限制输入或提供无限内存都不是一个选择 所以我必须忍受飞行的 OOME 因为 OOME 只杀死线程 所以我的软件运行在一些糟糕的状态 从外面看一切都很好 因为进程正在运行 但在内部却是脑死亡 我想拔掉它的插头 但
  • 将序列化数据发送到 servlet 时出现 java.io.EOFException

    我正在尝试从 Java 本地应用程序上传一个包含文件到服务器的对象 我的计划是 在 tomcat 上运行的 servlet 将使用以下方法获取对象ObjectInputStream in the doGet方法 但我得到一个EOFExcep
  • jasper 报告文件中出现错误

    首先 我在 iReport 5 1 0 中创建一个 R D1 jrxml 文件 我执行该报告的 Java 代码如下所示 import java sql Connection import java sql DriverManager imp
  • 使用 SimpleDateFormat、Java 进行错误的日期解析

    我需要使用日期模式 yyyy MM dd 解析输入字符串中的日期 如果日期采用任何其他格式 则抛出错误 这是我解析日期的代码 private void validateDate throws MyException Date parsedD
  • 不鼓励在Web应用程序中使用线程吗?

    我们与同事就在 Java 的 Web 应用程序中使用线程进行了激烈的讨论 他们的观点是 不建议在 Java Web 应用程序中使用线程 因为它们不受容器管理 一般来说 我对此表示同意 因为线程可能会干扰容器 但是 如果它不是 Java EE
  • 当框架被拖动时,如何设置 JWindow 的位置位于文本字段下方?

    我正在制作一个自动完成项目 就像谷歌一样 我的框架中有一个 jtextfield 每当我在该字段中输入内容时 该文本字段下方就会出现一个 JWindow 并且该窗口来自另一个类 现在的问题是 每当我拖动框架时 如何使窗口始终出现在文本字段下
  • SWT StyledText 有高度限制吗?

    我正在尝试创建一个应用程序 其中包含在 ScrolledComposite 中显示的 StyledText 框 我在 StyledText 框中显示大量行时遇到困难 超过 2 550 行似乎会导致问题 StyledText 框本身不能有滚动
  • Android NDK - 仅用 C/C++ 编写

    有没有一种可能的方法可以使用 C C 编写整个 NDK 应用程序 而无需像 hello jni 示例项目 HelloJni java 中那样的 Java 入门 类 以某种方式创建一个 HelloJni c 来执行相同的操作 从 Androi
  • Spring - 使用存储过程时使用 simplejdbccall 进行批量更新

    我正在使用 spring jdbc 模板 使用存储过程创建记录 public Long create City obj SimpleJdbcCall jdbcCall new SimpleJdbcCall getJdbcTemplate g

随机推荐

  • go语言使用thrift协议实现客户端和服务端报not enough arguments in call to oprot.WriteMessageBegin错误解决方案

    正常步骤 安装golang的Thrift包 go get git apache org thrift git lib go thrift 安装 Thrift 的 IDL 编译工具 http www apache org dyn closer
  • Mybatis学习笔记

    1 概述 MyBatis是一个优秀的持久层框架 它对JDBC操作数据库的过程进行封装 使开发者只需要关注 SQL本身 而不需要花费精力去处理例如注册驱动 创建connection 创建statement 手动设置参数 结果集检索等JDBC繁
  • R语言与机器学习中的回归方法学习笔记

    机器学习中的一些方法如决策树 随机森林 SVM 神经网络由于对数据没有分布的假定等普通线性回归模型的一些约束 预测效果也比较不错 交叉验证结果也能被接受 下面以R中lars包包含数据集diabetes为例说明机器学习中的回归方法 一 数据集
  • numpy(一)

    numpy作为一个科学计算的基础库 他能干的python也能干啊 我还要他干啥 先算个题比较一下 ndarray与python原生list的运算效率对比 import random import time import numpy as n
  • 剑指Offer第三十六题:两个链表的第一个公共结点

    题目描述 输入两个链表 找出它们的第一个公共结点 思路 这里两个单向链表如果有公共结点肯定是下面这种情况 最后通过公共结点汇合 1 看到这题我直接想到哈希 直接利用map存储一个链表 第二个链表遍历查找地址即可 2 链表的叠加 如下图 假设
  • 前沿技术创新是人工智能发展的动力之源 不断拓展能力边界

    近日 WAIC2022上海人工智能开发者大会在中国 上海 自由贸易试验区临港新片区举行 记者从会上获悉 上海将加大力度推动算法开源 数据开放 算力开发 与国内外知名开源社区互联互通 打造国际人工智能开发生态网络的关键节点 前沿技术创新是人工
  • shell脚本之 函数——【初学者必看】

    shell脚本之函数 一 shell函数定义 1 1函数注意事项 1 2 函数返回值 1 3函数调用的方法 1 4 函数的传参 1 5 函数的作用范围 1 6函数的参数 1 6 1参数的用法 1 6 2参数的表示方法 1 6 3 经典案例
  • Flutter实战Align使用详解

    Align相关属性 Align Key key this alignment Alignment center this widthFactor this heightFactor Widget child alignment 需要一个Al
  • 关于C++中unsigned类型

    我们知道c 中的long long 也知道c 里long long有符号 unsigned long long和long long的区别就在于 1 unsigned long long 没有符号 表示范围是0到264 1 2 long lo
  • Java实现Kafka生产者和消费者的示例(1),mysqlsql语句面试题

    RecordMetadata recordMetadata null try 将消息发送到Kafka服务器的名称为 one more topic 的Topic中 recordMetadata kafkaProducer send new P
  • liboqs-go库在Mac编译使用

    liboqs go库在Mac编译使用 liboqs go是liboqs 量子安全密码算法的开源C库的go封装 将在mac m1上部署和开发使用 所以简单记录下过程 部署 安装基础依赖工具 brew install cmake ninja o
  • Python3,5行代码,Chatxxx能对PDF文件进行旋转、提取、合并等一系列操作,看了这篇,80岁老奶奶走路都不扶墙了。

    ChatPDF的妙用 1 引言 2 代码实战 2 1 原理 2 2 安装 2 2 示例 2 2 1 创建PDF文件 2 2 2 旋转PDF文件 2 2 3 拆分PDF文件 2 2 4 合并PDF文件 2 2 5 提取PDF文件内容 3 总结
  • Linux编译器

    Vi是LINUX系统的第一个全屏幕交互式编译工具 vi的查找与替换 lt 要查找的字符 gt 向下查找要找查的字符 lt 要查找的字符 gt 向上查找要找查的字符 range s string1 string2 gc 替换 例如 10 20
  • 读书笔记----《编写高质量代码:改善Java程序的151个建议》第八/九章

    读书笔记 编写高质量代码 改善Java程序的151个建议 第八 九章 第八章 异常 110 提倡异常封装 111 采用异常链传递异常 112 受检异常尽可能转化为非受检异常 113 不要在finally块中处理返回值 114 不要在构造函数
  • MySQL - 表字段的自增约束

    设置表字段值自动增加 AUTO INCREMENT AUTO INCREMENT是MySQL唯一扩展的完整性约束 当向数据库表中插入新记录时 字段上的值会自动生成唯一的ID 在具体设置AUTO INCREMENT约束时 一个数据库表中只能有
  • 【Unity 3D】VR飞机动态拆装及引擎开关控制案例(附源码和演示视频 超详细)

    需要源码和资源包请点赞关注收藏后评论区留言私信 上一篇博客介绍了如何搭建飞机场景 制作了飞机引擎开启喷射火焰 并且让飞机起飞了参考链接如下 飞机场景搭建 一 效果展示 其中按空格可以控制后部引擎开关 即喷火和不喷火 演示视频如下 拆装飞机控
  • 仿微信 QQ聊天界面,弹出软键盘,listview上移,标题不动

    转载请注明出处 http blog csdn net ym4189 article details 79568820 完美解决聊天布局 顶部title固定 底部是EditText 中间是ListView 弹出软键盘 ListView上移 标
  • JAVA中的基本数据类型和包装类

    8大基本数据类型 byte byte 8位 存放的数据范围是 128 127之间 默认值为0 short short 16位 数据范围是 32768 32767之间 默认值为0 int int 32位 数据范围是 2 31 2 31 1 默
  • Unity3D 屏幕点击特效

    前言 屏幕点击特效目前用到两种 场景中特效和UI特效 其实就是坐标和层级之间的区别 无论特效用的帧动画 粒子特效亦或是贴图都可以使用 根据项目稍微调整下就好了 如果想优化的话可以写个对象池 这里就不赘述了 1 UI点击特效 注意要将Laye
  • java—手机号脱敏

    Java中手机号脱敏是指将真实手机号码中的一部分数字用特定字符替换 以保护用户的个人信息 通常 手机号码脱敏会将手机号的中间几位或者最后几位替换成特定字符 例如用 X 或者其他随意选择的字符来代替 手机号脱敏的目的是防止用户个人信息外泄 在