This commit is contained in:
Looly 2022-05-07 08:24:59 +08:00
parent 41bd03fa25
commit 662bfbe007
2 changed files with 42 additions and 53 deletions

View File

@ -16,12 +16,12 @@ import java.util.Map;
import java.util.Objects;
/**
* 身份证相关工具类<br>
* see <a href="https://www.oschina.net/code/snippet_1611_2881">https://www.oschina.net/code/snippet_1611_2881</a>
* 身份证相关工具类参考标准GB 11643-1999<br>
* 标准描述见<a href="http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=080D6FBF2BB468F9007657F26D60013E">http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=080D6FBF2BB468F9007657F26D60013E</a>
*
* <p>
* 本工具并没有对行政区划代码做校验如有需求请参阅2018年10
* <a href="http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/20181011221630.html">http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/20181011221630.html</a>
* 本工具并没有对行政区划代码做校验如有需求请参阅2020年12
* <a href="http://www.mca.gov.cn/article/sj/xzqh/2020/20201201.html">http://www.mca.gov.cn/article/sj/xzqh/2020/20201201.html</a>
* </p>
*
* @author Looly
@ -118,7 +118,8 @@ public class IdcardUtil {
}
/**
* 将15位身份证号码转换为18位
* 将15位身份证号码转换为18位<br>
* 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);
}
/**

View File

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