fix IdCardUtil

This commit is contained in:
Looly 2020-07-23 17:04:54 +08:00
parent 23884e7121
commit 0ee4108d26
3 changed files with 11 additions and 21 deletions

View File

@ -14,6 +14,7 @@
* 【http 】 UserAgentUtil增加Android原生浏览器识别pr#975@Github
* 【crypto 】 增加ECIES算法类issue#979@Github
* 【crypto 】 CollUtil增加padLeft和padRight方法pr#141@Gitee
* 【core 】 IdCardUtil香港身份证去除首字母校验issue#I1OOTB@Gitee
### Bug修复
* 【core 】 修复ZipUtil中finish位于循环内的问题issue#961@Github

View File

@ -46,10 +46,6 @@ public class IdcardUtil {
* 台湾身份首字母对应数字
*/
private static final Map<String, Integer> TW_FIRST_CODE = new HashMap<>();
/**
* 香港身份首字母对应数字
*/
private static final Map<String, Integer> HK_FIRST_CODE = new HashMap<>();
static {
CITY_CODES.put("11", "北京");
@ -114,18 +110,6 @@ public class IdcardUtil {
TW_FIRST_CODE.put("Z", 33);
TW_FIRST_CODE.put("I", 34);
TW_FIRST_CODE.put("O", 35);
//来自http://shenfenzheng.bajiu.cn/?rid=40
HK_FIRST_CODE.put("A", 1);// 持证人拥有香港居留权
HK_FIRST_CODE.put("B", 2);// 持证人所报称的出生日期或地点自首次登记以后曾作出更改
HK_FIRST_CODE.put("C", 3);// 持证人登记领证时在香港的居留受到入境事务处处长的限制
HK_FIRST_CODE.put("N", 14);// 持证人所报的姓名自首次登记以后曾作出更改
HK_FIRST_CODE.put("O", 15);// 持证人报称在香港澳门及中国以外其他地区或国家出生
HK_FIRST_CODE.put("R", 18);// 持证人拥有香港入境权
HK_FIRST_CODE.put("U", 21);// 持证人登记领证时在香港的居留不受入境事务处处长的限制
HK_FIRST_CODE.put("W", 23);// 持证人报称在澳门地区出生
HK_FIRST_CODE.put("X", 24);// 持证人报称在中国大陆出生
HK_FIRST_CODE.put("Z", 26);// 持证人报称在香港出生
}
/**
@ -357,11 +341,10 @@ public class IdcardUtil {
} else {
sum = 522 + (Character.toUpperCase(card.charAt(0)) - 55) * 8;
}
String start = idCard.substring(0, 1);
Integer iStart = HK_FIRST_CODE.get(start);
if (null == iStart) {
return false;
}
// 首字母A-ZA表示1以此类推
char start = idCard.charAt(0);
int iStart = start - 'A' + 1;
String mid = card.substring(1, 7);
String end = card.substring(7, 8);
char[] chars = mid.toCharArray();

View File

@ -87,4 +87,10 @@ public class IdcardUtilTest {
Assert.assertFalse(isValidCard18);
}
@Test
public void isValidHKCardIdTest(){
String hkCard="P174468(6)";
boolean flag=IdcardUtil.isValidHKCard(hkCard);
Assert.assertTrue(flag);
}
}