From 254c311ece0cd32a5e15e6a2e1e322439d018dc9 Mon Sep 17 00:00:00 2001 From: wangxianzhang Date: Tue, 23 Aug 2022 17:03:34 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E5=94=AF=E4=B8=80=E6=95=B4=E4=BB=B6?= =?UTF-8?q?=E5=8F=B7=E3=80=91@MaskResponseAspect#maskIdCard=E6=96=B9?= =?UTF-8?q?=E6=B3=95=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=AF=B9=E6=8A=A4=E7=85=A7?= =?UTF-8?q?=E7=9A=84=E9=80=82=E9=85=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tools/processor/MaskProcessor.java | 27 +++++++++++++------ 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java index 1ce0a85c54..586dadec3c 100644 --- a/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java +++ b/epmet-commons/epmet-commons-tools/src/main/java/com/epmet/commons/tools/processor/MaskProcessor.java @@ -2,8 +2,10 @@ package com.epmet.commons.tools.processor; import cn.hutool.core.util.StrUtil; import com.epmet.commons.tools.annotation.MaskResponse; +import com.epmet.commons.tools.enums.IdCardTypeEnum; import com.epmet.commons.tools.exception.ExceptionUtils; import com.epmet.commons.tools.page.PageData; +import com.epmet.commons.tools.utils.IdCardRegexUtils; import com.epmet.commons.tools.utils.Result; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -13,6 +15,7 @@ import java.lang.reflect.Field; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.regex.Pattern; /** * desc:脱敏处理器 @@ -136,21 +139,29 @@ public class MaskProcessor { } /** + * 唯一整件号打码,可能是身份证号或者是护照号 * 将明文字符串打码变为掩码。保留前6,后面打码 * @param originString * @return */ private String maskIdCard(String originString) { - int clearTextLength = 12; - // 仅将6位之后的全都打码 - int length = originString.length(); - if (length <= clearTextLength) { + + IdCardRegexUtils regexUtil = IdCardRegexUtils.parse(originString); + if (regexUtil.getTypeEnum() == IdCardTypeEnum.SFZH) { + // 身份证号 + // 仅将6位之后的全都打码 + int maskedTextLength = 12; + int length = originString.length(); + String maskStr = StrUtil.repeatByLength("*", length - maskedTextLength); + return originString.replaceAll("^(\\d{10})\\d+([a-zA-Z0-9]{2})$", new StringBuilder("$1").append(maskStr).append("$2").toString()); + } else if (regexUtil.getTypeEnum() == IdCardTypeEnum.PASSPORT) { + // 护照,前两位,后两位为明文,其他* + String maskStr = StrUtil.repeatByLength("*", originString.length() - 4); + return originString.replaceAll("^([a-zA-Z0-9]{2})\\d+(\\d{2})$", new StringBuilder("$1").append(maskStr).append("$2").toString()); + } else { + // 其他情况,不码 return originString; } - - String maskStr = StrUtil.repeatByLength("*", length - clearTextLength); - - return originString.replaceAll("^(\\d{10})\\d+([a-zA-Z0-9]{2})$", new StringBuilder("$1").append(maskStr).append("$2").toString()); } /**