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