From ff1688e1e6e7e80ef37fa586e31e3cf3e5994e0c Mon Sep 17 00:00:00 2001 From: jiangliheng Date: Fri, 21 Aug 2020 18:32:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=20Validator.isCitizenId()=20?= =?UTF-8?q?=E6=96=B9=E6=B3=95=EF=BC=8C=E9=80=9A=E8=BF=87=E8=B0=83=E7=94=A8?= =?UTF-8?q?=20IdcardUtil.isValidCard()=20=E6=9D=A5=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E8=BA=AB=E4=BB=BD=E8=AF=81=E5=8F=B7=E7=A0=81=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/lang/PatternPool.java | 4 ---- .../java/cn/hutool/core/lang/Validator.java | 17 ++++++----------- .../java/cn/hutool/core/lang/ValidatorTest.java | 11 ++++++++++- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/PatternPool.java b/hutool-core/src/main/java/cn/hutool/core/lang/PatternPool.java index 854de2b37..cfb0b8c3d 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/PatternPool.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/PatternPool.java @@ -56,10 +56,6 @@ public class PatternPool { * 移动电话 */ public final static Pattern MOBILE = Pattern.compile("(?:0|86|\\+86)?1[3-9]\\d{9}"); - /** - * 18位身份证号码 - */ - public final static Pattern CITIZEN_ID = Pattern.compile("[1-9]\\d{5}[1-2]\\d{3}((0\\d)|(1[0-2]))(([012]\\d)|3[0-1])\\d{3}(\\d|X|x)"); /** * 邮编 */ diff --git a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java index 6b6946920..4e3d1d710 100644 --- a/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java +++ b/hutool-core/src/main/java/cn/hutool/core/lang/Validator.java @@ -7,6 +7,7 @@ import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; +import cn.hutool.core.util.IdcardUtil; import java.net.MalformedURLException; import java.util.regex.Matcher; @@ -51,10 +52,6 @@ public class Validator { * 移动电话 */ public final static Pattern MOBILE = PatternPool.MOBILE; - /** - * 身份证号码 - */ - public final static Pattern CITIZEN_ID = PatternPool.CITIZEN_ID; /** * 邮编 */ @@ -724,19 +721,17 @@ public class Validator { } /** - * 验证是否为身份证号码(18位中国)
- * 出生日期只支持到到2999年 + * 验证是否为身份证号码(支持18位、15位和港澳台的10位) * - * @param value 值 - * @return 是否为身份证号码(18位中国) + * @param value 身份证号,支持18位、15位和港澳台的10位 + * @return 是否为有效身份证号码 */ public static boolean isCitizenId(CharSequence value) { - return isMatchRegex(CITIZEN_ID, value); + return IdcardUtil.isValidCard(String.valueOf(value)); } /** - * 验证是否为身份证号码(18位中国)
- * 出生日期只支持到到2999年 + * 验证是否为身份证号码(支持18位、15位和港澳台的10位) * * @param 字符串类型 * @param value 值 diff --git a/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java b/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java index a33f51301..720bba7f6 100644 --- a/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/lang/ValidatorTest.java @@ -71,8 +71,17 @@ public class ValidatorTest { @Test public void isCitizenIdTest() { - boolean b = Validator.isCitizenId("150218199012123389"); + // 18为身份证号码验证 + boolean b = Validator.isCitizenId("110101199003074477"); Assert.assertTrue(b); + + // 15位身份证号码验证 + boolean b1 = Validator.isCitizenId("410001910101123"); + Assert.assertTrue(b1); + + // 10位身份证号码验证 + boolean b2 = Validator.isCitizenId("U193683453"); + Assert.assertTrue(b2); } @Test(expected = ValidateException.class)