From 662bfbe007093cb8a1541b88e22fb284a6bbcc2b Mon Sep 17 00:00:00 2001 From: Looly Date: Sat, 7 May 2022 08:24:59 +0800 Subject: [PATCH] fix code --- .../java/cn/hutool/core/util/IdcardUtil.java | 61 ++++++++----------- .../cn/hutool/core/util/IdcardUtilTest.java | 34 +++++------ 2 files changed, 42 insertions(+), 53 deletions(-) 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 14ff3d34e..5064034f8 100755 --- a/hutool-core/src/main/java/cn/hutool/core/util/IdcardUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/IdcardUtil.java @@ -16,12 +16,12 @@ import java.util.Map; import java.util.Objects; /** - * 身份证相关工具类
- * see https://www.oschina.net/code/snippet_1611_2881 + * 身份证相关工具类,参考标准:GB 11643-1999
+ * 标准描述见:http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=080D6FBF2BB468F9007657F26D60013E * *

- * 本工具并没有对行政区划代码做校验,如有需求,请参阅(2018年10月): - * http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/20181011221630.html + * 本工具并没有对行政区划代码做校验,如有需求,请参阅(2020年12月): + * http://www.mca.gov.cn/article/sj/xzqh/2020/20201201.html *

* * @author Looly @@ -118,7 +118,8 @@ public class IdcardUtil { } /** - * 将15位身份证号码转换为18位 + * 将15位身份证号码转换为18位
+ * 15位身份证号码遵循GB 11643-1989标准。 * * @param idCard 15位身份编码 * @return 18位身份编码 @@ -422,17 +423,6 @@ public class IdcardUtil { return sum % 11 == 0; } - /** - * 根据身份编号获取生日,只支持15或18位身份证号码 - * - * @param idcard 身份编号 - * @return 生日(yyyyMMdd) - * @see #getBirth(String) - */ - public static String getBirthByIdCard(final String idcard) { - return getBirth(idcard); - } - /** * 根据身份编号获取生日,只支持15或18位身份证号码 * @@ -458,8 +448,8 @@ public class IdcardUtil { * @return 日期 */ public static DateTime getBirthDate(final String idCard) { - final String birthByIdCard = getBirthByIdCard(idCard); - return null == birthByIdCard ? null : DateUtil.parse(birthByIdCard, DatePattern.PURE_DATE_FORMAT); + final String birth = getBirth(idCard); + return null == birth ? null : DateUtil.parse(birth, DatePattern.PURE_DATE_FORMAT); } /** @@ -468,8 +458,8 @@ public class IdcardUtil { * @param idcard 身份编号 * @return 年龄 */ - public static int getAgeByIdCard(final String idcard) { - return getAgeByIdCard(idcard, DateUtil.date()); + public static int getAge(final String idcard) { + return getAge(idcard, DateUtil.date()); } /** @@ -479,9 +469,8 @@ public class IdcardUtil { * @param dateToCompare 以此日期为界,计算年龄。 * @return 年龄 */ - public static int getAgeByIdCard(final String idcard, final Date dateToCompare) { - final String birth = getBirthByIdCard(idcard); - return DateUtil.age(DateUtil.parse(birth, "yyyyMMdd"), dateToCompare); + public static int getAge(final String idcard, final Date dateToCompare) { + return DateUtil.age(getBirthDate(idcard), dateToCompare); } /** @@ -490,7 +479,7 @@ public class IdcardUtil { * @param idcard 身份编号 * @return 生日(yyyy) */ - public static Short getYearByIdCard(String idcard) { + public static Short getBirthYear(String idcard) { final int len = idcard.length(); if (len < CHINA_ID_MIN_LENGTH) { return null; @@ -506,7 +495,7 @@ public class IdcardUtil { * @param idcard 身份编号 * @return 生日(MM) */ - public static Short getMonthByIdCard(String idcard) { + public static Short getBirthMonth(String idcard) { final int len = idcard.length(); if (len < CHINA_ID_MIN_LENGTH) { return null; @@ -522,7 +511,7 @@ public class IdcardUtil { * @param idcard 身份编号 * @return 生日(dd) */ - public static Short getDayByIdCard(String idcard) { + public static Short getBirthDay(String idcard) { final int len = idcard.length(); if (len < CHINA_ID_MIN_LENGTH) { return null; @@ -538,7 +527,7 @@ public class IdcardUtil { * @param idcard 身份编号 * @return 性别(1 : 男 , 0 : 女) */ - public static int getGenderByIdCard(String idcard) { + public static int getGender(String idcard) { Assert.notBlank(idcard); final int len = idcard.length(); if (len < CHINA_ID_MIN_LENGTH) { @@ -559,7 +548,7 @@ public class IdcardUtil { * @return 省份编码 * @since 5.7.2 */ - public static String getProvinceCodeByIdCard(final String idcard) { + public static String getProvinceCode(final String idcard) { final int len = idcard.length(); if (len == CHINA_ID_MIN_LENGTH || len == CHINA_ID_MAX_LENGTH) { return idcard.substring(0, 2); @@ -573,8 +562,8 @@ public class IdcardUtil { * @param idcard 身份编码 * @return 省份名称。 */ - public static String getProvinceByIdCard(final String idcard) { - final String code = getProvinceCodeByIdCard(idcard); + public static String getProvince(final String idcard) { + final String code = getProvinceCode(idcard); if (StrUtil.isNotBlank(code)) { return CITY_CODES.get(code); } @@ -588,7 +577,7 @@ public class IdcardUtil { * @param idcard 身份编码 * @return 地市级编码 */ - public static String getCityCodeByIdCard(final String idcard) { + public static String getCityCode(final String idcard) { final int len = idcard.length(); if (len == CHINA_ID_MIN_LENGTH || len == CHINA_ID_MAX_LENGTH) { return idcard.substring(0, 4); @@ -604,7 +593,7 @@ public class IdcardUtil { * @return 地市级编码 * @since 5.8.0 */ - public static String getDistrictCodeByIdCard(final String idcard) { + public static String getDistrictCode(final String idcard) { final int len = idcard.length(); if (len == CHINA_ID_MIN_LENGTH || len == CHINA_ID_MAX_LENGTH) { return idcard.substring(0, 6); @@ -723,11 +712,11 @@ public class IdcardUtil { * @param idcard 身份证号码 */ public Idcard(final String idcard) { - this.provinceCode = IdcardUtil.getProvinceCodeByIdCard(idcard); - this.cityCode = IdcardUtil.getCityCodeByIdCard(idcard); + this.provinceCode = IdcardUtil.getProvinceCode(idcard); + this.cityCode = IdcardUtil.getCityCode(idcard); this.birthDate = IdcardUtil.getBirthDate(idcard); - this.gender = IdcardUtil.getGenderByIdCard(idcard); - this.age = IdcardUtil.getAgeByIdCard(idcard); + this.gender = IdcardUtil.getGender(idcard); + this.age = IdcardUtil.getAge(idcard); } /** 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 25a4e812f..62aef6263 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 @@ -47,49 +47,49 @@ public class IdcardUtilTest { } @Test - public void getAgeByIdCardTest() { + public void getAgeTest() { final DateTime date = DateUtil.parse("2017-04-10"); - final int age = IdcardUtil.getAgeByIdCard(ID_18, date); + final int age = IdcardUtil.getAge(ID_18, date); Assert.assertEquals(age, 38); - final int age2 = IdcardUtil.getAgeByIdCard(ID_15, date); + final int age2 = IdcardUtil.getAge(ID_15, date); Assert.assertEquals(age2, 28); } @Test - public void getBirthByIdCardTest() { - final String birth = IdcardUtil.getBirthByIdCard(ID_18); + public void getBirthTest() { + final String birth = IdcardUtil.getBirth(ID_18); Assert.assertEquals(birth, "19781216"); - final String birth2 = IdcardUtil.getBirthByIdCard(ID_15); + final String birth2 = IdcardUtil.getBirth(ID_15); Assert.assertEquals(birth2, "19880730"); } @Test - public void getProvinceByIdCardTest() { - final String province = IdcardUtil.getProvinceByIdCard(ID_18); + public void getProvinceTest() { + final String province = IdcardUtil.getProvince(ID_18); Assert.assertEquals(province, "江苏"); - final String province2 = IdcardUtil.getProvinceByIdCard(ID_15); + final String province2 = IdcardUtil.getProvince(ID_15); Assert.assertEquals(province2, "内蒙古"); } @Test - public void getCityCodeByIdCardTest() { - final String codeByIdCard = IdcardUtil.getCityCodeByIdCard(ID_18); - Assert.assertEquals("3210", codeByIdCard); + public void getCityCodeTest() { + final String code = IdcardUtil.getCityCode(ID_18); + Assert.assertEquals("3210", code); } @Test - public void getDistrictCodeByIdCardTest() { - final String codeByIdCard = IdcardUtil.getDistrictCodeByIdCard(ID_18); - Assert.assertEquals("321083", codeByIdCard); + public void getDistrictCodeTest() { + final String code = IdcardUtil.getDistrictCode(ID_18); + Assert.assertEquals("321083", code); } @Test - public void getGenderByIdCardTest() { - final int gender = IdcardUtil.getGenderByIdCard(ID_18); + public void getGenderTest() { + final int gender = IdcardUtil.getGender(ID_18); Assert.assertEquals(1, gender); }