2016-02-29 1 views
1

Мне нужно замаскировать данные PII для моего приложения. Данные PII будут иметь формат String и переменную длину, так как могут включать имя, адрес, идентификаторы почты и т. Д.Маска часть данных String, которая имеет разную длину с использованием Java

Так что мне нужно замаскировать эти данные перед их регистрацией, это не должно быть полной маской вместо этого, если длина строки меньше или равна 8 символам, затем замаскируйте первую половину с помощью «XXX и т. д.»

Если длина больше 8, замаскируйте первую и последнюю часть строки так, чтобы только средняя Отображаются 5 символов. Я знаю, что мы можем сделать это, используя java sub-stringa и итерацию по строке, но хотим знать, есть ли какое-либо другое простое решение для решения этой проблемы. Заранее спасибо

ответ

1

Если вы используете 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)); 

Вы можете проверить длину строки перед генерацией maskString использования, если другое заявление.

+0

Спасибо, это помогло ... – user3815000

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

Объяснение:

  • () группы регулярного выражения, и мы можем использовать $, чтобы получить доступ к этой группе ($ 1, $ 2, $ 3).
  • Граница \ b помогает проверить, что мы начинаем цифры (есть другие способы сделать это, но здесь это будет делать).
  • (\ d {+ half +}) фиксирует (половину) количество цифр в группе 1. То же самое происходит и в части else.
+0

Было бы лучше предоставить некоторые входные и выходные образцы. –

Смежные вопросы