Merge pull request #3527 from yearliny/v5-dev

IdcardUtil 新增对新版外国人永久居留身份证(18位)的支持
This commit is contained in:
Golden Looly 2024-03-29 11:25:24 +08:00 committed by GitHub
commit d773a59da6
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 2 deletions

View File

@ -278,8 +278,8 @@ public class IdcardUtil {
return false;
}
// 省份
final String proCode = idcard.substring(0, 2);
// 截取省份代码新版外国人永久居留身份证以9开头第二三位是受理地代码
final String proCode = idcard.startsWith("9") ? idcard.substring(1, 3): idcard.substring(0, 2);
if (null == CITY_CODES.get(proCode)) {
return false;
}

View File

@ -14,6 +14,10 @@ import org.junit.Test;
public class IdcardUtilTest {
private static final String ID_18 = "321083197812162119";
/**
* 新版外国人永久居留身份证号码
*/
private static final String FOREIGN_ID_18 = "932682198501010017";
private static final String ID_15 = "150102880730303";
@Test
@ -24,6 +28,8 @@ public class IdcardUtilTest {
boolean valid15 = IdcardUtil.isValidCard(ID_15);
Assert.assertTrue(valid15);
Assert.assertTrue(IdcardUtil.isValidCard(FOREIGN_ID_18));
// 无效
String idCard = "360198910283844";
Assert.assertFalse(IdcardUtil.isValidCard(idCard));
@ -58,6 +64,7 @@ public class IdcardUtilTest {
int age = IdcardUtil.getAgeByIdCard(ID_18, date);
Assert.assertEquals(age, 38);
Assert.assertEquals(IdcardUtil.getAgeByIdCard(FOREIGN_ID_18, date), 32);
int age2 = IdcardUtil.getAgeByIdCard(ID_15, date);
Assert.assertEquals(age2, 28);
@ -127,6 +134,10 @@ public class IdcardUtilTest {
// 台湾人在大陆身份证
isValidCard18 = IdcardUtil.isValidCard18("830000200209060065");
Assert.assertTrue(isValidCard18);
// 新版外国人永久居留身份证
isValidCard18 = IdcardUtil.isValidCard18("932682198501010017");
Assert.assertTrue(isValidCard18);
}
@Test