summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Zhineng <[email protected]>2025-05-26 21:51:52 +0800
committerGitHub <[email protected]>2025-05-26 21:51:52 +0800
commit186e50439b0f72205e04858aeff9b3cde1cf281b (patch)
tree7d3464906ea8239be99e4f691614ad5a2d92b02d
parent548c049fa58edb27a0229a9bd1f44b6dd0e65a42 (diff)
parentce8d02afeebbaeae1216ba86c89bec373c17d68b (diff)
downloadvehicle-license-china-186e50439b0f72205e04858aeff9b3cde1cf281b.tar.gz
vehicle-license-china-186e50439b0f72205e04858aeff9b3cde1cf281b.zip
Merge pull request #1 from lizhineng/fix-yue-z
Guangdong-Z only supports the Macau and Hong Kong suffixes
-rw-r--r--src/RegistrationNumber.php16
-rw-r--r--tests/RegistrationNumberTest.php27
2 files changed, 32 insertions, 11 deletions
diff --git a/src/RegistrationNumber.php b/src/RegistrationNumber.php
index 678633d..1b5e936 100644
--- a/src/RegistrationNumber.php
+++ b/src/RegistrationNumber.php
@@ -383,12 +383,22 @@ final readonly class RegistrationNumber
private static function checkSuffix(
string $region, string $authority, string $sequence, string $suffix
): bool {
+ // Ensure the HK or Macau suffix is only available to Guangdong-Z
if (in_array($suffix, self::GUANGDONG_Z_SPECIAL_SUFFIXS, strict: true)) {
- return $region === self::GUANGDONG_PROVINCE
- && $authority === self::GUANGDONG_SPECIAL_AUTHORITY;
+ if (! ($region === self::GUANGDONG_PROVINCE
+ && $authority === self::GUANGDONG_SPECIAL_AUTHORITY)) {
+ return false;
+ }
+ // Ensure the Guangdong-Z license plate ends with either an "HK" or a "Macau" suffix
+ } else if ($region === self::GUANGDONG_PROVINCE
+ && $authority === self::GUANGDONG_SPECIAL_AUTHORITY) {
+ if (! in_array($suffix, self::GUANGDONG_Z_SPECIAL_SUFFIXS, strict: true)) {
+ return false;
+ }
}
- if ($suffix !== '' && ! in_array($suffix, self::AVAILLABLE_SUFFIXS, strict: true)) {
+ // If the license plate has a suffix, the sequence must be 4 or 5 characters long
+ if ($suffix !== '' && in_array($suffix, self::AVAILLABLE_SUFFIXS, strict: true)) {
$len = mb_strlen($sequence);
return $len >= 4 && $len <= 5;
diff --git a/tests/RegistrationNumberTest.php b/tests/RegistrationNumberTest.php
index a6cbbd8..eadac54 100644
--- a/tests/RegistrationNumberTest.php
+++ b/tests/RegistrationNumberTest.php
@@ -290,7 +290,8 @@ final class RegistrationNumberTest extends TestCase
['粤O12345'],
// Authority code "Z" (the 2nd character) is for internal in Guangdong province
- ['粤Z12345'],
+ ['粤Z1234港'],
+ ['粤Z12345港'],
// Authority code "W" (the 2nd character) is for internal in Shandong province
['鲁W12345'],
@@ -309,9 +310,6 @@ final class RegistrationNumberTest extends TestCase
// Authority code "O" (the 2nd character) is for internal
['粤OD12345'],
- // Authority code "Z" (the 2nd character) is for internal in Guangdong province
- ['粤ZD12345'],
-
// Authority code "W" (the 2nd character) is for internal in Shandong province
['鲁WD12345'],
];
@@ -423,10 +421,6 @@ final class RegistrationNumberTest extends TestCase
['粤Z00000港'],
['粤Z0000澳'],
['粤Z00000澳'],
- ['粤Z0000试'],
- ['粤Z00000试'],
- ['粤Z0000超'],
- ['粤Z00000超'],
];
}
@@ -439,6 +433,23 @@ final class RegistrationNumberTest extends TestCase
['粤E0006假'],
['粤E0006港'],
['粤E0000澳'],
+ ['粤Z0000警'],
+ ['粤Z00000警'],
+ ['粤Z0000学'],
+ ['粤Z00000学'],
+ ['粤Z0000挂'],
+ ['粤Z00000挂'],
+ ['粤Z0000试'],
+ ['粤Z00000试'],
+ ['粤Z0000超'],
+ ['粤Z00000超'],
+ ['粤ED12345警'],
+ ['粤ED12345学'],
+ ['粤ED12345挂'],
+ ['粤ZD12345港'],
+ ['粤ZD12345澳'],
+ ['粤ED12345试'],
+ ['粤ED12345超'],
];
}