From 20636feb857b5946714be1cb22c8567f1ad002ba Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 22 Apr 2023 22:38:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DVIN=EF=BC=88=E8=BD=A6?= =?UTF-8?q?=E6=9E=B6=E5=8F=B7=EF=BC=89=E6=AD=A3=E5=88=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/hutool/core/lang/Validator.java | 4 +- .../hutool/core/regex/PatternPool.java | 30 ++++++++++--- .../dromara/hutool/core/regex/RegexPool.java | 43 +++++++++++++------ .../hutool/core/lang/ValidatorTest.java | 6 +++ 4 files changed, 63 insertions(+), 20 deletions(-) diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java index df99c2751..81cfdf1aa 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java @@ -1113,7 +1113,7 @@ public class Validator { } /** - * 验证是否为车架号;别名:行驶证编号 车辆识别代号 车辆识别码 + * 验证是否为车架号,别名:行驶证编号 车辆识别代号 车辆识别码 * * @param 字符串类型 * @param value 值 @@ -1131,7 +1131,7 @@ public class Validator { } /** - * 验证是否为驾驶证 别名:驾驶证档案编号、行驶证编号 + * 验证是否为驾驶证 别名:驾驶证档案编号、行驶证编号 * 仅限:中国驾驶证档案编号 * * @param value 值,12位数字字符串,eg:430101758218 diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/regex/PatternPool.java b/hutool-core/src/main/java/org/dromara/hutool/core/regex/PatternPool.java index 339747eb3..50885db94 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/regex/PatternPool.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/regex/PatternPool.java @@ -162,13 +162,31 @@ public class PatternPool { * */ public static final Pattern CREDIT_CODE = Pattern.compile(RegexPool.CREDIT_CODE); + /** - * 车架号 - * 别名:车辆识别代号 车辆识别码 - * eg:LDC613P23A1305189 - * eg:LSJA24U62JG269225 - * 十七位码、车架号 - * 车辆的唯一标示 + * 车架号(车辆识别代号由世界制造厂识别代号(WMI、车辆说明部分(VDS)车辆指示部分(VIS)三部分组成,共 17 位字码。)
+ * 别名:车辆识别代号、车辆识别码、车架号、十七位码
+ * 标准号:GB 16735-2019
+ * 标准官方地址:https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=E2EBF667F8C032B1EDFD6DF9C1114E02 + * 对年产量大于或等于1 000 辆的完整车辆和/或非完整车辆制造厂: + *
+	 *   第一部分为世界制造厂识别代号(WMI),3位
+	 *   第二部分为车辆说明部分(VDS),     6位
+	 *   第三部分为车辆指示部分(VIS),     8位
+	 * 
+ * + * 对年产量小于 1 000 辆的完整车辆和/或非完整车辆制造厂: + *
+	 *   第一部分为世界制造广识别代号(WMI),3位;
+	 *   第二部分为车辆说明部分(VDS),6位;
+	 *   第三部分的三、四、五位与第一部分的三位字码起构成世界制造厂识别代号(WMI),其余五位为车辆指示部分(VIS),8位。
+	 * 
+ * + *
+	 *   eg:LDC613P23A1305189
+	 *   eg:LSJA24U62JG269225
+	 *   eg:LBV5S3102ESJ25655
+	 * 
*/ public static final Pattern CAR_VIN = Pattern.compile(RegexPool.CAR_VIN); /** diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/regex/RegexPool.java b/hutool-core/src/main/java/org/dromara/hutool/core/regex/RegexPool.java index 6cdfdb4ff..02e7963da 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/regex/RegexPool.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/regex/RegexPool.java @@ -149,11 +149,11 @@ public interface RegexPool { * 中国车牌号码(兼容新能源车牌) */ String PLATE_NUMBER = - //https://gitee.com/dromara/hutool/issues/I1B77H?from=project-issue - "^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[ABCDEFGHJK])|([ABCDEFGHJK]([A-HJ-NP-Z0-9])[0-9]{4})))|" + - //https://gitee.com/dromara/hutool/issues/I1BJHE?from=project-issue - "([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]\\d{3}\\d{1,3}[领])|" + - "([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$"; + //https://gitee.com/dromara/hutool/issues/I1B77H?from=project-issue + "^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[ABCDEFGHJK])|([ABCDEFGHJK]([A-HJ-NP-Z0-9])[0-9]{4})))|" + + //https://gitee.com/dromara/hutool/issues/I1BJHE?from=project-issue + "([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领]\\d{3}\\d{1,3}[领])|" + + "([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$"; /** * 统一社会信用代码 @@ -166,15 +166,34 @@ public interface RegexPool { * */ String CREDIT_CODE = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$"; + /** - * 车架号 - * 别名:车辆识别代号 车辆识别码 - * eg:LDC613P23A1305189 - * eg:LSJA24U62JG269225 - * 十七位码、车架号 - * 车辆的唯一标示 + * 车架号(车辆识别代号由世界制造厂识别代号(WMI、车辆说明部分(VDS)车辆指示部分(VIS)三部分组成,共 17 位字码。)
+ * 别名:车辆识别代号、车辆识别码、车架号、十七位码
+ * 标准号:GB 16735-2019
+ * 标准官方地址:https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=E2EBF667F8C032B1EDFD6DF9C1114E02 + * 对年产量大于或等于1 000 辆的完整车辆和/或非完整车辆制造厂: + *
+	 *   第一部分为世界制造厂识别代号(WMI),3位
+	 *   第二部分为车辆说明部分(VDS),     6位
+	 *   第三部分为车辆指示部分(VIS),     8位
+	 * 
+ * + * 对年产量小于 1 000 辆的完整车辆和/或非完整车辆制造厂: + *
+	 *   第一部分为世界制造广识别代号(WMI),3位;
+	 *   第二部分为车辆说明部分(VDS),6位;
+	 *   第三部分的三、四、五位与第一部分的三位字码起构成世界制造厂识别代号(WMI),其余五位为车辆指示部分(VIS),8位。
+	 * 
+ * + *
+	 *   eg:LDC613P23A1305189
+	 *   eg:LSJA24U62JG269225
+	 *   eg:LBV5S3102ESJ25655
+	 * 
*/ - String CAR_VIN = "^[A-HJ-NPR-Z0-9]{8}[0-9X][A-HJ-NPR-Z0-9]{2}\\d{6}$"; + String CAR_VIN = "^[A-HJ-NPR-Z0-9]{8}[X0-9]([A-HJ-NPR-Z0-9]{3}\\d{5}|[A-HJ-NPR-Z0-9]{5}\\d{3})$"; + /** * 驾驶证 别名:驾驶证档案编号、行驶证编号 * eg:430101758218 diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/lang/ValidatorTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/lang/ValidatorTest.java index 870449734..039faa9f9 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/lang/ValidatorTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/lang/ValidatorTest.java @@ -230,6 +230,12 @@ public class ValidatorTest { Assertions.assertTrue(Validator.isCarVin("LSJA24U62JG269225")); Assertions.assertTrue(Validator.isCarVin("LDC613P23A1305189")); Assertions.assertFalse(Validator.isCarVin("LOC613P23A1305189")); + + Assertions.assertTrue(Validator.isCarVin("LSJA24U62JG269225")); //标准分类1 + Assertions.assertTrue(Validator.isCarVin("LDC613P23A1305189")); //标准分类1 + Assertions.assertTrue(Validator.isCarVin("LBV5S3102ESJ25655")); //标准分类1 + Assertions.assertTrue(Validator.isCarVin("LBV5S3102ESJPE655")); //标准分类2 + Assertions.assertFalse(Validator.isCarVin("LOC613P23A1305189")); //错误示例 } @Test