<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.7</version>
</dependency>
需要用到的jar包
----------------
package com.example.demo.test;
import org.apache.commons.lang3.StringUtils;
/**
* 数据隐私显示 手机号,身份证号和银行卡号等
*/
public class PrivacyDimmer {
/**
* 手机号
* 中间四位打码
* @param content
* @return
*/
public static String maskMobile(String content) {
String overPlay = "****";
int start = 3;
int end = 7;
if (StringUtils.isEmpty(content)) {
return "";
}
return StringUtils.overlay(content, overPlay, start, end);
}
/**
* 邮箱账号
* 132****99308084911
* @param email
* @return
*/
public static String maskEmail(String email) {
String overPlay = "****";
if (StringUtils.isEmpty(email)) {
return "";
}
String at = "@";
if (!email.contains(at)) {
return email;
}
/**
* 这里主要逻辑是需要保留邮箱的注册商 比如@qq.com
* 后四位打码,不足四位,除了第一位都打码
*/
int length = StringUtils.indexOf(email, at);
String content = StringUtils.substring(email, 0, length);
String mask="";
if(content.length()>4){
mask = StringUtils.overlay(content, overPlay, content.length()-4, content.length());
}else {
mask =StringUtils.substring(content,0,1)+ overPlay;
}
return mask + StringUtils.substring(email, length);
}
/**
* 身份证打码操作
* 中间8位打码。生日年月日
* @param idCard
* @return
*/
public static String maskIdCard(String idCard) {
String overplay = "********";
int start = 6;
int end = 14;
if (StringUtils.isEmpty(idCard)) {
return "";
}
return StringUtils.overlay(idCard, overplay, start, end);
}
/**
* 银行卡除了后四位其他打码
* @param bandCard
* @return
*/
public static String maskBankCard(String bandCard){
int end = bandCard.length()-4;
StringBuffer overPlay = new StringBuffer();
for(int i=0;i<end;i++){
overPlay.append("*");
}
return StringUtils.overlay(bandCard, overPlay.toString(), 0, end);
}
/**
* 密码全部打码
* @param pwd
* @return
*/
public static String maskPwd(String pwd){
int end = pwd.length();
StringBuffer overPlay = new StringBuffer();
for(int i=0;i<end;i++){
overPlay.append("*");
}
return StringUtils.overlay(pwd, overPlay.toString(), 0, end);
}
/**
* 中文姓名,除了第一位不打码
* @param name
* @return
*/
public static String maskName(String name){
int end = name.length();
StringBuffer overPlay = new StringBuffer();
for(int i=1;i<end;i++){
overPlay.append("*");
}
return StringUtils.overlay(name, overPlay.toString(), 1, end);
}
public static void main(String[] args) {
System.out.println(maskName("张三"));
}
}
----------------------------------------------------------------
参考:https://blog.youkuaiyun.com/WK313753744/article/details/87867720
然后我去查了StringUtils.overlay的源码方法。
public static String overlay(final String str, String overlay, int start, int end) {
if (str == null) {
return null;
}
if (overlay == null) {
overlay = EMPTY;
}
final int len = str.length();
if (start < 0) {
start = 0;
}
if (start > len) {
start = len;
}
if (end < 0) {
end = 0;
}
if (end > len) {
end = len;
}
if (start > end) {
final int temp = start;
start = end;
end = temp;
}
return str.substring(0, start) +
overlay +
str.substring(end);
}
也是做了一个字符串截取与拼接。