由来

在日常开发中,我们对身份证的验证主要是正则方式(位数,数字范围等),但是中国身份证,尤其18位身份证每一位都有严格规定,并且最后一位为校验位。而我们在实际应用中,针对身份证的验证理应严格至此。于是IdcardUtil应运而生。

IdcardUtil从3.0.4版本起加入Hutool工具家族,请升级至此版本以上可使用。

介绍

IdcardUtil现在支持大陆15位、18位身份证,港澳台10位身份证。
工具中主要的方法包括:

  1. isValidCard 验证身份证是否合法
  2. convert15To18 身份证15位转18位
  3. getBirthByIdCard 获取生日
  4. getAgeByIdCard 获取年龄
  5. getYearByIdCard 获取生日年
  6. getMonthByIdCard 获取生日月
  7. getDayByIdCard 获取生日天
  8. getGenderByIdCard 获取性别
  9. getProvinceByIdCard 获取省份

    使用

    1. String ID_18 = "321083197812162119";
    2. String ID_15 = "150102880730303";
    3. //是否有效
    4. boolean valid = IdcardUtil.isValidCard(ID_18);
    5. boolean valid15 = IdcardUtil.isValidCard(ID_15);
    6. //转换
    7. String convert15To18 = IdcardUtil.convert15To18(ID_15);
    8. Assert.assertEquals(convert15To18, "150102198807303035");
    9. //年龄
    10. DateTime date = DateUtil.parse("2017-04-10");
    11. int age = IdcardUtil.getAgeByIdCard(ID_18, date);
    12. Assert.assertEquals(age, 38);
    13. int age2 = IdcardUtil.getAgeByIdCard(ID_15, date);
    14. Assert.assertEquals(age2, 28);
    15. //生日
    16. String birth = IdcardUtil.getBirthByIdCard(ID_18);
    17. Assert.assertEquals(birth, "19781216");
    18. String birth2 = IdcardUtil.getBirthByIdCard(ID_15);
    19. Assert.assertEquals(birth2, "19880730");
    20. //省份
    21. String province = IdcardUtil.getProvinceByIdCard(ID_18);
    22. Assert.assertEquals(province, "江苏");
    23. String province2 = IdcardUtil.getProvinceByIdCard(ID_15);
    24. Assert.assertEquals(province2, "内蒙古");

    声明 以上两个身份证号码为随机编造的,如有雷同,纯属巧合。