Browse Source

名字加密规则

master
luogw 1 week ago
parent
commit
42b3216351
  1. 3
      src/main/java/com/project/ding/domain/dto/UserDTO.java
  2. 37
      src/main/java/com/project/ding/utils/ChineseNameEncryptUtil.java

3
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;
}
}

37
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);
};
}
}
Loading…
Cancel
Save