From a0eeefefe94d2951847d93e6a814e1b5a28a655d Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 2 Aug 2023 11:26:49 +0800 Subject: [PATCH] =?UTF-8?q?DesensitizedUtil=E5=A2=9E=E5=8A=A0=E6=B8=85?= =?UTF-8?q?=E7=A9=BA=E7=AD=96=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../cn/hutool/core/util/DesensitizedUtil.java | 42 +++++++++++++++++-- .../core/util/DesensitizedUtilTest.java | 2 + 3 files changed, 41 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b5e418b50..8c3f73fe2 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ ### 🐣新特性 * 【core 】 NumberUtil.nullToZero增加重载(issue#I7PPD2@Github) +* 【core 】 DesensitizedUtil增加清空策略(issue#I7PUJ2@Github) ### 🐞Bug修复 diff --git a/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java index a8030740b..787eea2f8 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/DesensitizedUtil.java @@ -78,7 +78,15 @@ public class DesensitizedUtil { /** * 定义了一个first_mask的规则,只显示第一个字符。 */ - FIRST_MASK + FIRST_MASK, + /** + * 清空为null + */ + CLEAR_TO_NULL, + /** + * 清空为"" + */ + CLEAR_TO_EMPTY } /** @@ -148,11 +156,37 @@ public class DesensitizedUtil { case FIRST_MASK: newStr = firstMask(String.valueOf(str)); break; + case CLEAR_TO_EMPTY: + newStr = clear(); + break; + case CLEAR_TO_NULL: + newStr = clearToNull(); + break; default: } return newStr; } + /** + * 清空为空字符串 + * + * @return 清空后的值 + * @since 5.8.22 + */ + public static String clear() { + return StrUtil.EMPTY; + } + + /** + * 清空为{@code null} + * + * @return 清空后的值(null) + * @since 5.8.22 + */ + public static String clearToNull() { + return null; + } + /** * 【用户id】不对外提供userId * @@ -308,8 +342,8 @@ public class DesensitizedUtil { /** * 【银行卡号脱敏】由于银行卡号长度不定,所以只展示前4位,后面的位数根据卡号决定展示1-4位 - * 例如: - *
{@code
+	 * 例如:
+	 * 
{@code
 	 *      1. "1234 2222 3333 4444 6789 9"    ->   "1234 **** **** **** **** 9"
 	 *      2. "1234 2222 3333 4444 6789 91"   ->   "1234 **** **** **** **** 91"
 	 *      3. "1234 2222 3333 4444 678"       ->    "1234 **** **** **** 678"
@@ -329,7 +363,7 @@ public class DesensitizedUtil {
 		}
 
 		final int length = bankCardNo.length();
-		final int endLength= length % 4 == 0 ? 4 : length % 4;
+		final int endLength = length % 4 == 0 ? 4 : length % 4;
 		final int midLength = length - 4 - endLength;
 
 		final StringBuilder buf = new StringBuilder();
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/DesensitizedUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/DesensitizedUtilTest.java
index 52a45425b..e534461f3 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/DesensitizedUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/DesensitizedUtilTest.java
@@ -14,6 +14,8 @@ public class DesensitizedUtilTest {
 	@Test
 	public void desensitizedTest() {
 		Assert.assertEquals("0", DesensitizedUtil.desensitized("100", DesensitizedUtil.DesensitizedType.USER_ID));
+		Assert.assertEquals("", DesensitizedUtil.desensitized("100", DesensitizedUtil.DesensitizedType.CLEAR_TO_EMPTY));
+		Assert.assertNull(DesensitizedUtil.desensitized("100", DesensitizedUtil.DesensitizedType.CLEAR_TO_NULL));
 		Assert.assertEquals("段**", DesensitizedUtil.desensitized("段正淳", DesensitizedUtil.DesensitizedType.CHINESE_NAME));
 		Assert.assertEquals("5***************1X", DesensitizedUtil.desensitized("51343620000320711X", DesensitizedUtil.DesensitizedType.ID_CARD));
 		Assert.assertEquals("0915*****79", DesensitizedUtil.desensitized("09157518479", DesensitizedUtil.DesensitizedType.FIXED_PHONE));