From 42b3216351368c3d9651dd697d9ea009c16a294a Mon Sep 17 00:00:00 2001 From: luogw <3132758203@qq.com> Date: Sat, 28 Feb 2026 10:54:41 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8D=E5=AD=97=E5=8A=A0=E5=AF=86=E8=A7=84?= =?UTF-8?q?=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/project/ding/domain/dto/UserDTO.java | 3 +- .../ding/utils/ChineseNameEncryptUtil.java | 37 +++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/project/ding/utils/ChineseNameEncryptUtil.java diff --git a/src/main/java/com/project/ding/domain/dto/UserDTO.java b/src/main/java/com/project/ding/domain/dto/UserDTO.java index d19e81f..41e61ba 100644 --- a/src/main/java/com/project/ding/domain/dto/UserDTO.java +++ b/src/main/java/com/project/ding/domain/dto/UserDTO.java @@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.DesensitizedUtil; import com.fasterxml.jackson.annotation.JsonFormat; import com.project.base.domain.dto.BaseDTO; +import com.project.ding.utils.ChineseNameEncryptUtil; import lombok.Data; import java.util.Date; @@ -74,7 +75,7 @@ public class UserDTO extends BaseDTO { public UserDTO desensitize() { this.mobile = DesensitizedUtil.mobilePhone(this.getMobile()); - this.setName(DesensitizedUtil.chineseName(this.getName())); + this.setName(ChineseNameEncryptUtil.encryptChineseName(this.getName())); return this; } } diff --git a/src/main/java/com/project/ding/utils/ChineseNameEncryptUtil.java b/src/main/java/com/project/ding/utils/ChineseNameEncryptUtil.java new file mode 100644 index 0000000..195b80a --- /dev/null +++ b/src/main/java/com/project/ding/utils/ChineseNameEncryptUtil.java @@ -0,0 +1,37 @@ +package com.project.ding.utils; + +/** + * 中文名字脱敏工具类 + * 规则: + * 1. 二字名:第二个字替换为*(如:李*) + * 2. 三字名:中间字替换为*(如:李*华) + * 3. 四字名:中间两个字替换为*(如:李**明) + * 4. 其他长度:保留首尾,中间全部替换为*(如:李***强、*明) + */ +public class ChineseNameEncryptUtil { + + /** + * 脱敏中文名字(优化版) + * @param chineseName 原始中文名字 + * @return 脱敏后的名字,空值返回空字符串 + */ + public static String encryptChineseName(String chineseName) { + // 空值处理 + if (chineseName == null || chineseName.isBlank()) { + return ""; + } + + // 去除首尾空格 + String name = chineseName.trim(); + int nameLength = name.length(); + + // 增强型 switch 表达式(JDK 14+ 支持,可简化为单行返回) + return switch (nameLength) { + case 1 -> name; // 单字名直接返回 + case 2 -> name.charAt(0) + "*"; // 二字名:首字符 + * + case 3 -> name.charAt(0) + "*" + name.charAt(2); // 三字名:首 + * + 尾 + case 4 -> name.charAt(0) + "**" + name.charAt(3); // 四字名:首 + ** + 尾 + default -> name.charAt(0) + "*".repeat(nameLength - 2) + name.charAt(nameLength - 1); + }; + } +} \ No newline at end of file