fix:修复脱敏银行卡号bug

This commit is contained in:
linyang.wly 2023-07-17 01:51:59 +08:00
parent 7ab95e5cb8
commit 2ec1c9dfa7
2 changed files with 22 additions and 7 deletions

View File

@ -307,26 +307,30 @@ public class DesensitizedUtil {
} }
/** /**
* 银行卡号脱敏 * 银行卡号脱敏由于银行卡号长度不定所以只展示前4位后面的位数根据卡号决定展示1-4位
* eg: 1101 **** **** **** 3256 * 例如
* 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 银行卡号 * @param bankCardNo 银行卡号
* @return 脱敏之后的银行卡号 * @return 脱敏之后的银行卡号
* @since 5.6.3
*/ */
public static String bankCard(String bankCardNo) { public static String bankCard(String bankCardNo) {
if (StrUtil.isBlank(bankCardNo)) { if (StrUtil.isBlank(bankCardNo)) {
return bankCardNo; return bankCardNo;
} }
bankCardNo = StrUtil.trim(bankCardNo); bankCardNo = StrUtil.replace(bankCardNo," ","");
if (bankCardNo.length() < 9) { if (bankCardNo.length() < 9) {
return bankCardNo; return bankCardNo;
} }
final int length = bankCardNo.length(); final int length = bankCardNo.length();
final int midLength = length - 8; final int endLength= length % 4 == 0 ? 4 : length % 4;
final StringBuilder buf = new StringBuilder(); final int midLength = length - 4 - endLength;
final StringBuilder buf = new StringBuilder();
buf.append(bankCardNo, 0, 4); buf.append(bankCardNo, 0, 4);
for (int i = 0; i < midLength; ++i) { for (int i = 0; i < midLength; ++i) {
if (i % 4 == 0) { if (i % 4 == 0) {
@ -334,7 +338,7 @@ public class DesensitizedUtil {
} }
buf.append('*'); buf.append('*');
} }
buf.append(CharUtil.SPACE).append(bankCardNo, length - 4, length); buf.append(CharUtil.SPACE).append(bankCardNo, length - endLength, length);
return buf.toString(); return buf.toString();
} }

View File

@ -89,4 +89,15 @@ public class DesensitizedUtilTest {
Assert.assertEquals("陕A1****D", DesensitizedUtil.carLicense("陕A12345D")); Assert.assertEquals("陕A1****D", DesensitizedUtil.carLicense("陕A12345D"));
Assert.assertEquals("京A123", DesensitizedUtil.carLicense("京A123")); 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"));
}
} }