修复VIN(车架号)正则问题

This commit is contained in:
Looly
2023-04-22 22:38:32 +08:00
parent c005ad8c56
commit 20636feb85
4 changed files with 63 additions and 20 deletions

View File

@@ -1113,7 +1113,7 @@ public class Validator {
} }
/** /**
* 验证是否为车架号别名:行驶证编号 车辆识别代号 车辆识别码 * 验证是否为车架号别名:行驶证编号 车辆识别代号 车辆识别码
* *
* @param <T> 字符串类型 * @param <T> 字符串类型
* @param value 值 * @param value 值

View File

@@ -162,13 +162,31 @@ public class PatternPool {
* </pre> * </pre>
*/ */
public static final Pattern CREDIT_CODE = Pattern.compile(RegexPool.CREDIT_CODE); public static final Pattern CREDIT_CODE = Pattern.compile(RegexPool.CREDIT_CODE);
/** /**
* 车架号 * 车架号(车辆识别代号由世界制造厂识别代号(WMI、车辆说明部分(VDS)车辆指示部分(VIS)三部分组成,共 17 位字码。)<br>
* 别名:车辆识别代号 车辆识别码 * 别名:车辆识别代号车辆识别码、车架号、十七位码<br>
* 标准号GB 16735-2019<br>
* 标准官方地址https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=E2EBF667F8C032B1EDFD6DF9C1114E02
* 对年产量大于或等于1 000 辆的完整车辆和/或非完整车辆制造厂:
* <pre>
* 第一部分为世界制造厂识别代号(WMI)3位
* 第二部分为车辆说明部分(VDS) 6位
* 第三部分为车辆指示部分(VIS) 8位
* </pre>
*
* 对年产量小于 1 000 辆的完整车辆和/或非完整车辆制造厂:
* <pre>
* 第一部分为世界制造广识别代号(WMI),3位;
* 第二部分为车辆说明部分(VDS)6位;
* 第三部分的三、四、五位与第一部分的三位字码起构成世界制造厂识别代号(WMI),其余五位为车辆指示部分(VIS)8位。
* </pre>
*
* <pre>
* eg:LDC613P23A1305189 * eg:LDC613P23A1305189
* eg:LSJA24U62JG269225 * eg:LSJA24U62JG269225
* 十七位码、车架号 * eg:LBV5S3102ESJ25655
* 车辆的唯一标示 * </pre>
*/ */
public static final Pattern CAR_VIN = Pattern.compile(RegexPool.CAR_VIN); public static final Pattern CAR_VIN = Pattern.compile(RegexPool.CAR_VIN);
/** /**

View File

@@ -166,15 +166,34 @@ public interface RegexPool {
* </pre> * </pre>
*/ */
String CREDIT_CODE = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$"; String CREDIT_CODE = "^[0-9A-HJ-NPQRTUWXY]{2}\\d{6}[0-9A-HJ-NPQRTUWXY]{10}$";
/** /**
* 车架号 * 车架号(车辆识别代号由世界制造厂识别代号(WMI、车辆说明部分(VDS)车辆指示部分(VIS)三部分组成,共 17 位字码。)<br>
* 别名:车辆识别代号 车辆识别码 * 别名:车辆识别代号车辆识别码、车架号、十七位码<br>
* 标准号GB 16735-2019<br>
* 标准官方地址https://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=E2EBF667F8C032B1EDFD6DF9C1114E02
* 对年产量大于或等于1 000 辆的完整车辆和/或非完整车辆制造厂:
* <pre>
* 第一部分为世界制造厂识别代号(WMI)3位
* 第二部分为车辆说明部分(VDS) 6位
* 第三部分为车辆指示部分(VIS) 8位
* </pre>
*
* 对年产量小于 1 000 辆的完整车辆和/或非完整车辆制造厂:
* <pre>
* 第一部分为世界制造广识别代号(WMI),3位;
* 第二部分为车辆说明部分(VDS)6位;
* 第三部分的三、四、五位与第一部分的三位字码起构成世界制造厂识别代号(WMI),其余五位为车辆指示部分(VIS)8位。
* </pre>
*
* <pre>
* eg:LDC613P23A1305189 * eg:LDC613P23A1305189
* eg:LSJA24U62JG269225 * eg:LSJA24U62JG269225
* 十七位码、车架号 * eg:LBV5S3102ESJ25655
* 车辆的唯一标示 * </pre>
*/ */
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 * eg:430101758218

View File

@@ -230,6 +230,12 @@ public class ValidatorTest {
Assertions.assertTrue(Validator.isCarVin("LSJA24U62JG269225")); Assertions.assertTrue(Validator.isCarVin("LSJA24U62JG269225"));
Assertions.assertTrue(Validator.isCarVin("LDC613P23A1305189")); Assertions.assertTrue(Validator.isCarVin("LDC613P23A1305189"));
Assertions.assertFalse(Validator.isCarVin("LOC613P23A1305189")); 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 @Test