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 97647f272..2a5bb1673 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 @@ -307,26 +307,30 @@ public class DesensitizedUtil { } /** - * 银行卡号脱敏 - * eg: 1101 **** **** **** 3256 + * 【银行卡号脱敏】由于银行卡号长度不定,所以只展示前4位,后面的位数根据卡号决定展示1-4位 + * 例如: + * 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" + * 4. "1234 2222 3333 4444 6789" ==》 "1234 **** **** **** 6789" * * @param bankCardNo 银行卡号 * @return 脱敏之后的银行卡号 - * @since 5.6.3 */ public static String bankCard(String bankCardNo) { if (StrUtil.isBlank(bankCardNo)) { return bankCardNo; } - bankCardNo = StrUtil.trim(bankCardNo); + bankCardNo = StrUtil.replace(bankCardNo," ",""); if (bankCardNo.length() < 9) { return bankCardNo; } final int length = bankCardNo.length(); - final int midLength = length - 8; - final StringBuilder buf = new StringBuilder(); + final int endLength= length % 4 == 0 ? 4 : length % 4; + final int midLength = length - 4 - endLength; + final StringBuilder buf = new StringBuilder(); buf.append(bankCardNo, 0, 4); for (int i = 0; i < midLength; ++i) { if (i % 4 == 0) { @@ -334,7 +338,7 @@ public class DesensitizedUtil { } buf.append('*'); } - buf.append(CharUtil.SPACE).append(bankCardNo, length - 4, length); + buf.append(CharUtil.SPACE).append(bankCardNo, length - endLength, length); return buf.toString(); } 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 0441dc3e6..7fd893aeb 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 @@ -89,4 +89,15 @@ public class DesensitizedUtilTest { Assert.assertEquals("陕A1****D", DesensitizedUtil.carLicense("陕A12345D")); Assert.assertEquals("京A123", DesensitizedUtil.carLicense("京A123")); } + + @Test + public void bankCardTest(){ + Assert.assertEquals(null, DesensitizedUtil.bankCard(null)); + Assert.assertEquals("", DesensitizedUtil.bankCard("")); + Assert.assertEquals("1234 **** **** **** **** 9", DesensitizedUtil.bankCard("1234 2222 3333 4444 6789 9")); + Assert.assertEquals("1234 **** **** **** **** 91", DesensitizedUtil.bankCard("1234 2222 3333 4444 6789 91")); + Assert.assertEquals("1234 **** **** **** 6789", DesensitizedUtil.bankCard("1234 2222 3333 4444 6789")); + Assert.assertEquals("1234 **** **** **** 678", DesensitizedUtil.bankCard("1234 2222 3333 4444 678")); + + } }