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);
}