diff --git a/CHANGELOG.md b/CHANGELOG.md index 02db9de33..5820371f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ ### 🐣新特性 ### 🐞Bug修复 +* 【core 】 IdcardUtil#getCityCodeByIdCard位数问题(issue#2224@Github) ------------------------------------------------------------------------------------------------------------- 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 4fa1201f3..7c760583f 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 @@ -580,15 +580,32 @@ public class IdcardUtil { } /** - * 根据身份编号获取市级编码,只支持15或18位身份证号码 + * 根据身份编号获取地市级编码,只支持15或18位身份证号码
+ * 获取编码为4位 * * @param idcard 身份编码 - * @return 市级编码。 + * @return 地市级编码 */ public static String getCityCodeByIdCard(String idcard) { int len = idcard.length(); if (len == CHINA_ID_MIN_LENGTH || len == CHINA_ID_MAX_LENGTH) { - return idcard.substring(0, 5); + return idcard.substring(0, 4); + } + return null; + } + + /** + * 根据身份编号获取区县级编码,只支持15或18位身份证号码
+ * 获取编码为6位 + * + * @param idcard 身份编码 + * @return 地市级编码 + * @since 5.8.0 + */ + public static String getDistrictCodeByIdCard(String idcard) { + int len = idcard.length(); + if (len == CHINA_ID_MIN_LENGTH || len == CHINA_ID_MAX_LENGTH) { + return idcard.substring(0, 6); } return null; } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/IdcardUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/IdcardUtilTest.java index b9cd747a2..8afba95a1 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/IdcardUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/IdcardUtilTest.java @@ -78,7 +78,13 @@ public class IdcardUtilTest { @Test public void getCityCodeByIdCardTest() { String codeByIdCard = IdcardUtil.getCityCodeByIdCard(ID_18); - Assert.assertEquals("32108", codeByIdCard); + Assert.assertEquals("3210", codeByIdCard); + } + + @Test + public void getDistrictCodeByIdCardTest() { + String codeByIdCard = IdcardUtil.getDistrictCodeByIdCard(ID_18); + Assert.assertEquals("321083", codeByIdCard); } @Test