diff --git a/CHANGELOG.md b/CHANGELOG.md index a9894b92f..471f7ab77 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ ### 🐞Bug修复 * 【json 】 修复XML转义字符的问题(issue#I3XH09@Gitee) * 【core 】 修复FormatCache中循环引用异常(pr#1673@Github) +* 【core 】 修复IdcardUtil.getIdcardInfo.getProvinceCode获取为汉字的问题(issue#I3XP4Q@Gitee) ------------------------------------------------------------------------------------------------------------- diff --git a/hutool-core/src/main/java/cn/hutool/core/util/IdcardUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/IdcardUtil.java index e792cec88..3d8b9ce88 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/IdcardUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/IdcardUtil.java @@ -532,6 +532,21 @@ public class IdcardUtil { return (sCardChar % 2 != 0) ? 1 : 0; } + /** + * 根据身份编号获取户籍省份编码,只支持15或18位身份证号码 + * + * @param idcard 身份编码 + * @return 省份编码 + * @since 5.7.2 + */ + public static String getProvinceCodeByIdCard(String idcard) { + int len = idcard.length(); + if (len == CHINA_ID_MIN_LENGTH || len == CHINA_ID_MAX_LENGTH) { + return idcard.substring(0, 2); + } + return null; + } + /** * 根据身份编号获取户籍省份,只支持15或18位身份证号码 * @@ -539,10 +554,9 @@ public class IdcardUtil { * @return 省份名称。 */ public static String getProvinceByIdCard(String idcard) { - int len = idcard.length(); - if (len == CHINA_ID_MIN_LENGTH || len == CHINA_ID_MAX_LENGTH) { - String sProvinNum = idcard.substring(0, 2); - return CITY_CODES.get(sProvinNum); + final String code = getProvinceCodeByIdCard(idcard); + if(StrUtil.isNotBlank(code)){ + return CITY_CODES.get(code); } return null; } @@ -672,7 +686,7 @@ public class IdcardUtil { * @param idcard 身份证号码 */ public Idcard(String idcard) { - this.provinceCode = IdcardUtil.getProvinceByIdCard(idcard); + this.provinceCode = IdcardUtil.getProvinceCodeByIdCard(idcard); this.cityCode = IdcardUtil.getCityCodeByIdCard(idcard); this.birthDate = IdcardUtil.getBirthDate(idcard); this.gender = IdcardUtil.getGenderByIdCard(idcard);