diff --git a/hutool-core/src/main/java/cn/hutool/core/util/CreditCodeUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/CreditCodeUtil.java
index 2cdbe7ef9..e1ee0bf26 100644
--- a/hutool-core/src/main/java/cn/hutool/core/util/CreditCodeUtil.java
+++ b/hutool-core/src/main/java/cn/hutool/core/util/CreditCodeUtil.java
@@ -7,7 +7,8 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.regex.Pattern;
/**
- * 统一社会信用代码工具类
+ * 统一社会信用代码(GB32100-2015)工具类
+ * 标准见:https://www.cods.org.cn/c/2020-10-29/12575.html
*
*
* 第一部分:登记管理部门代码1位 (数字或大写英文字母)
@@ -24,7 +25,13 @@ public class CreditCodeUtil {
public static final Pattern CREDIT_CODE_PATTERN = PatternPool.CREDIT_CODE;
+ /**
+ * 加权因子
+ */
private static final int[] WEIGHT = {1, 3, 9, 27, 19, 26, 16, 17, 20, 29, 25, 13, 8, 24, 10, 30, 28};
+ /**
+ * 代码字符集
+ */
private static final char[] BASE_CODE_ARRAY = "0123456789ABCDEFGHJKLMNPQRTUWXY".toCharArray();
private static final Map CODE_INDEX_MAP;
@@ -110,10 +117,10 @@ public class CreditCodeUtil {
}
/**
- * 获取校验码
+ * 获取校验位的值
*
* @param creditCode 统一社会信息代码
- * @return 获取较验位的值
+ * @return 获取校验位的值,-1表示获取错误
*/
private static int getParityBit(CharSequence creditCode) {
int sum = 0;
diff --git a/hutool-core/src/test/java/cn/hutool/core/util/CreditCodeUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/CreditCodeUtilTest.java
index 0d5dcd378..9263feb66 100644
--- a/hutool-core/src/test/java/cn/hutool/core/util/CreditCodeUtilTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/util/CreditCodeUtilTest.java
@@ -17,9 +17,17 @@ public class CreditCodeUtilTest {
Assert.assertTrue(CreditCodeUtil.isCreditCode(testCreditCode));
}
+ @Test
+ public void isCreditCode2() {
+ // 由于早期部分试点地区推行 法人和其他组织统一社会信用代码 较早,会存在部分代码不符合国家标准的情况。
+ // 见:https://github.com/bluesky335/IDCheck
+ String testCreditCode = "91350211M00013FA1N";
+ Assert.assertFalse(CreditCodeUtil.isCreditCode(testCreditCode));
+ }
+
@Test
public void randomCreditCode() {
final String s = CreditCodeUtil.randomCreditCode();
Assert.assertTrue(CreditCodeUtil.isCreditCode(s));
}
-}
\ No newline at end of file
+}