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 955d6590c..d1609edbd 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 @@ -51,14 +51,17 @@ public class PatternPool { public final static Pattern UUID = Pattern.compile("^[0-9a-z]{8}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{4}-[0-9a-z]{12}$"); /** 不带横线的UUID */ public final static Pattern UUID_SIMPLE = Pattern.compile("^[0-9a-z]{32}$"); - /** 中国车牌号码(兼容新能源车牌) */ - public final static Pattern PLATE_NUMBER = Pattern.compile("^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[DF])|([DF]([A-HJ-NP-Z0-9])[0-9]{4})))|([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$"); /** MAC地址正则 */ public static final Pattern MAC_ADDRESS = Pattern.compile("((?:[A-F0-9]{1,2}[:-]){5}[A-F0-9]{1,2})|(?:0x)(\\d{12})(?:.+ETHER)", Pattern.CASE_INSENSITIVE); /** 16进制字符串 */ public static final Pattern HEX = Pattern.compile("^[a-f0-9]+$", Pattern.CASE_INSENSITIVE); /** 时间正则 */ public static final Pattern TIME = Pattern.compile("\\d{1,2}:\\d{1,2}(:\\d{1,2})?"); + /** 中国车牌号码(兼容新能源车牌) */ + public final static Pattern PLATE_NUMBER = Pattern.compile( + //https://gitee.com/loolly/hutool/issues/I1B77H?from=project-issue + "^(([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z](([0-9]{5}[ABCDEFGHJK])|([ABCDEFGHJK]([A-HJ-NP-Z0-9])[0-9]{4})))|" + + "([京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领][A-Z][A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳使领]))$"); // ------------------------------------------------------------------------------------------------------------------------------------------------------------------- /** Pattern池 */ 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 e37c5fb0d..c702e3a48 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 @@ -130,4 +130,9 @@ public class ValidatorTest { general = Validator.isGeneral(str, -1, 100); Assert.assertFalse(general); } + + @Test + public void isPlateNumberTest(){ + Assert.assertTrue(Validator.isPlateNumber("粤BA03205")); + } } diff --git a/hutool-crypto/src/test/java/cn/hutool/crypto/test/RSATest.java b/hutool-crypto/src/test/java/cn/hutool/crypto/test/RSATest.java index 3d0cf6a6a..a167b8d64 100644 --- a/hutool-crypto/src/test/java/cn/hutool/crypto/test/RSATest.java +++ b/hutool-crypto/src/test/java/cn/hutool/crypto/test/RSATest.java @@ -14,6 +14,7 @@ import org.junit.Assert; import org.junit.Test; import javax.crypto.Cipher; +import java.math.BigInteger; import java.security.KeyPair; import java.security.PublicKey; @@ -182,4 +183,18 @@ public class RSATest { Assert.assertEquals(result1, result2); } + + @Test + public void exponentTest(){ + String modulus = "BD99BAAB9E56B7FD85FB8BCF53CAD2913C1ACEF9063E7C913CD6FC4FEE040DA44D8" + + "ADAA35A9DCABD6E936C402D47278049638407135BAB22BB091396CB6873195C8AC8B0B7AB123" + + "C3BF7A6341A4419BDBC0EFB85DBCD9A3AD12C99E2265BDCC1197913749E2AFA568EB7623DA3A" + + "361335AA1F9FFA6E1801DDC8228AA86306B87"; + String publicExponent = "65537"; + RSA rsa = new RSA(new BigInteger(modulus, 16), null, new BigInteger(publicExponent)); + + final String encryptBase64 = rsa.encryptBase64("测试内容", KeyType.PublicKey); + Assert.assertNotNull(encryptBase64); + } + }