diff --git a/common/util/src/main/java/kr/co/palnet/kac/util/MaskingUtil.java b/common/util/src/main/java/kr/co/palnet/kac/util/MaskingUtil.java new file mode 100644 index 0000000..3f9f3e5 --- /dev/null +++ b/common/util/src/main/java/kr/co/palnet/kac/util/MaskingUtil.java @@ -0,0 +1,106 @@ +package kr.co.palnet.kac.util; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class MaskingUtil { + + public static String maskString(String originalString, int start, int end) { + String mask = originalString.substring(start, end).replaceAll(".", "*"); + return originalString.substring(0, start) + mask + originalString.substring(end); + } + + public static String maskStringEndWith(String originalString, int end) { + return maskString(originalString, 0, end); + } + + public static String maskStringStartWith(String originalString, int start) { + return maskString(originalString, start, originalString.length()); + } + + public static String maskEmail(String email) { + return email.replaceAll("(?<=.{3}).(?=[^@]*?@)", "*"); + } + + public static String maskEmailAndDomain(String email) { + String regex = "(.+)@(.+)"; + + Pattern pattern = Pattern.compile(regex); + Matcher matcher = pattern.matcher(email); + if (matcher.find()) { + String localPart = matcher.group(1); + String domain = matcher.group(2); + + localPart = maskString(localPart, 3, localPart.length()); + domain = maskString(domain, 3, domain.length()); + return localPart + "@" + domain; + } + return email; + } + + public static String maskCardNumber(String cardNumber) { +// return cardNumber.replaceAll("\\b(\\d{6})(\\d+)(\\d{4})\\b", "$1****$2"); + // 하이픈 제거 + String cardNumberWithoutHyphens = cardNumber.replace("-", ""); + + // 마스킹 적용 + StringBuffer sb = new StringBuffer(); + Pattern pattern = Pattern.compile("(\\d{6})(\\d+)(\\d{4})"); + Matcher matcher = pattern.matcher(cardNumberWithoutHyphens); + while (matcher.find()) { + matcher.appendReplacement(sb, matcher.group(1) + "*".repeat(matcher.group(2).length()) + matcher.group(3)); + } + matcher.appendTail(sb); + String maskedCardNumber = sb.toString(); + + // Return the card number in the original format + return cardNumber.contains("-") + ? maskedCardNumber.replaceAll("(\\d{4})(.{4})(.{4})(\\d{3,4})", "$1-$2-$3-$4") + : maskedCardNumber; + + } + + + public static String maskName(String name) { + if (name.length() == 1) { + return "*"; + } else if (name.length() == 2) { + return name.replaceAll("(?<=.).", "*"); + } else { + return name.replaceAll("(?<=.).(?=.)", "*"); + } + } + + public static String maskPhoneNumber(String phoneNumber) { + // 하이픈 제거 + String phoneNumberWithoutHyphens = phoneNumber.replace("-", ""); + + // 마스킹 적용 + StringBuffer sb = new StringBuffer(); + Pattern pattern = Pattern.compile("(02|0\\d{2})(\\d+)(\\d{4})"); + Matcher matcher = pattern.matcher(phoneNumberWithoutHyphens); + while (matcher.find()) { + matcher.appendReplacement(sb, matcher.group(1) + "*".repeat(matcher.group(2).length()) + matcher.group(3)); + } + matcher.appendTail(sb); + String maskedPhoneNumber = sb.toString(); + return phoneNumber.contains("-") + ? maskedPhoneNumber.replaceAll("(\\d{2,3})(.{3,4})(\\d{4})", "$1-$2-$3") + : maskedPhoneNumber; + } + + public static String maskExpireDate(String expireDate) { + return expireDate.replaceAll("(\\d{2})(\\d{2})", "$1/$2"); + } + + + public static String maskResidentRegistrationNumber(String rrn) { + return rrn.replaceAll("(\\d{6}-?\\d{1})(\\d{6})", "$1******"); + } + + public static String maskIp(String ip) { + return ip.replaceAll("^(\\d+)(\\.\\d+\\.\\d+\\.\\d+)$", "***$2"); + } + + +}