diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/codec/Luhn.java b/hutool-core/src/main/java/org/dromara/hutool/core/codec/Luhn.java
new file mode 100644
index 000000000..66028feef
--- /dev/null
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/codec/Luhn.java
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2024. looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * https://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+package org.dromara.hutool.core.codec;
+
+import org.dromara.hutool.core.regex.PatternPool;
+import org.dromara.hutool.core.regex.ReUtil;
+import org.dromara.hutool.core.text.StrUtil;
+
+/**
+ * Luhn算法,也称为“模10”算法,是一种简单的校验和(Checksum)算法,在ISO/IEC 7812-1中定义,校验步骤如下:
+ *
+ * - 从右边第1个数字(校验数字)开始偶数位乘以2,如果小于10,直接返回,否则将个位数和十位数相加
+ * - 把步骤1种获得的乘积的各位数字与原号码中未乘2的各位数字相加
+ * - 如果步骤2得到的总和模10为0,则校验通过
+ *
+ *
+ */
+public class Luhn {
+
+ /**
+ * 校验字符串
+ *
+ * @param withCheckDigitString 含校验数字的字符串
+ * @return true - 校验通过,false-校验不通过
+ * @throws IllegalArgumentException 如果字符串为空或不是8~19位的数字
+ */
+ public static boolean check(final String withCheckDigitString) {
+ if(StrUtil.isBlank(withCheckDigitString)){
+ return false;
+ }
+ if(!ReUtil.isMatch(PatternPool.NUMBERS, withCheckDigitString)){
+ // 必须为全数字
+ return false;
+ }
+ return sum(withCheckDigitString) % 10 == 0;
+ }
+
+ /**
+ * 根据Luhn算法计算字符串各位数字之和
+ *
+ * @param str 需要校验的数字字符串
+ * @return 数字之和
+ */
+ private static int sum(final String str) {
+ final char[] strArray = str.toCharArray();
+ final int n = strArray.length;
+ int sum = strArray[n - 1] - '0';;
+ for (int i = 2; i <= n; i++) {
+ int a = strArray[n - i] - '0';
+ // 偶数位乘以2
+ if ((i & 1) == 0) {
+ a *= 2;
+ }
+ // 十位数和个位数相加,如果不是偶数位,不乘以2,则十位数为0
+ sum += a / 10 + a % 10;
+ }
+ return sum;
+ }
+}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/data/BCN.java b/hutool-core/src/main/java/org/dromara/hutool/core/data/BCN.java
new file mode 100644
index 000000000..4a87f3784
--- /dev/null
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/data/BCN.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2024. looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * https://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+package org.dromara.hutool.core.data;
+
+/**
+ * 银行卡号(Bank Card Number)封装,参考标准:
+ *
+ * - 银行卡发卡行标识代码及卡号(JR/T 0008—2000),见:https://std.samr.gov.cn/hb/search/stdHBDetailed?id=C362C05F3E35A68DE05397BE0A0A9B00
+ * - ISO 7812-1:1997,见:https://www.iso.org/standard/56907.html
+ *
+ *
+ *
+ */
+public class BCN {
+}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberValidator.java b/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberValidator.java
index 8809e58c9..c9e9e8e3b 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberValidator.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/math/NumberValidator.java
@@ -197,7 +197,6 @@ public class NumberValidator {
return true;
}
try {
- //noinspection ResultOfMethodCallIgnored
Long.decode(s);
} catch (final NumberFormatException e) {
return false;
diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/codec/LuhnTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/codec/LuhnTest.java
new file mode 100644
index 000000000..9edf4c09b
--- /dev/null
+++ b/hutool-core/src/test/java/org/dromara/hutool/core/codec/LuhnTest.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2024. looly(loolly@aliyun.com)
+ * Hutool is licensed under Mulan PSL v2.
+ * You can use this software according to the terms and conditions of the Mulan PSL v2.
+ * You may obtain a copy of Mulan PSL v2 at:
+ * https://license.coscl.org.cn/MulanPSL2
+ * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
+ * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
+ * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
+ * See the Mulan PSL v2 for more details.
+ */
+
+package org.dromara.hutool.core.codec;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class LuhnTest {
+ @Test
+ void checkTest() {
+ assertTrue(Luhn.check("6225760008219524"));
+
+ assertFalse(Luhn.check("123456"));
+ assertFalse(Luhn.check(""));
+ assertFalse(Luhn.check("abc"));
+ assertFalse(Luhn.check("622576000821952a"));
+ }
+}