我需要屏蔽我的应用程序的PII数据。 PII数据将是String格式和可变长度,因为它可能包括姓名,地址,邮件ID等。
所以我需要在记录它们之前屏蔽这些数据,它不应该是完整的掩码,如果字符串的长度小于或等于8个字符,那么用" XXX等掩盖前半部分。 "
如果长度大于8,则屏蔽字符串的第一个和最后一个部分,使得只有中间5个字符可见。 我知道我们可以使用java子字符串和迭代字符串来完成此操作,但想知道是否有任何其他简单的解决方案来解决这个问题。 提前致谢
答案 0 :(得分:2)
如果你使用的是Apache Commons,你可以这样做
String maskChar = "*";
//number of characters to be masked
String maskString = StringUtils.repeat( maskChar, 4);
//string to be masked
String str = "FirstName";
//this will mask first 4 characters of the string
System.out.println( StringUtils.overlay(str, maskString, 0, 4) );
您可以在使用if else语句生成maskString
之前检查字符串长度。
答案 1 :(得分:0)
你可以使用这个功能;根据您的需要改变一半的逻辑:
public static String maskedVariableString(String original)
{
String maskedString = null;
if(original.length()<9)
{
int half = original.length()/2;
StringBuilder sb =new StringBuilder("");
for(int i=0;i<(original.length()-half);i++)
{
sb.append("X");
}
maskedString = original.replaceAll("\\b.*(\\d{"+half+"})", sb.toString()+"$1");
}
else
{
int maskLength = original.length()-5;
int firstMaskLength = maskLength/2;
int secondMaskLength = maskLength-firstMaskLength;
StringBuilder sb =new StringBuilder("");
for(int i=0;i<firstMaskLength;i++)
{
sb.append("X");
}
String firstMask = sb.toString();
StringBuilder sb1 =new StringBuilder("");
for(int i=0;i<secondMaskLength;i++)
{
sb1.append("X");
}
String secondMask = sb1.toString();
maskedString = original.replaceAll("\\b(\\d{"+firstMaskLength+"})(\\d{5})(\\d{"+secondMaskLength+"})", firstMask+"$2"+secondMask);
}
return maskedString;
}
说明: