Class IdcardUtil

java.lang.Object
com.luna.common.text.IdcardUtil
Direct Known Subclasses:
RandomIDCardUtil

public class IdcardUtil extends Object
身份证相关工具类
see https://www.oschina.net/code/snippet_1611_2881

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

Since:
3.0.4
Author:
Looly
  • Constructor Details

    • IdcardUtil

      public IdcardUtil()
  • Method Details

    • convert15To18

      public static String convert15To18(String idCard)
      将15位身份证号码转换为18位
      Parameters:
      idCard - 15位身份编码
      Returns:
      18位身份编码
    • isValidCard

      public static boolean isValidCard(String idCard)
      是否有效身份证号,忽略X的大小写
      Parameters:
      idCard - 身份证号,支持18位、15位和港澳台的10位
      Returns:
      是否有效
    • isValidCard18

      public static boolean isValidCard18(String idcard)

      判断18位身份证的合法性

      根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
      排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

      顺序码: 表示在同一地址码所标识的区域范围内,对同年、同月、同 日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配 给女性。

      1. 第1、2位数字表示:所在省份的代码
      2. 第3、4位数字表示:所在城市的代码
      3. 第5、6位数字表示:所在区县的代码
      4. 第7~14位数字表示:出生年、月、日
      5. 第15、16位数字表示:所在地的派出所的代码
      6. 第17位数字表示性别:奇数表示男性,偶数表示女性
      7. 第18位数字是校检码,用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示

      第十八位数字(校验码)的计算方法为:

      1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
      2. 将这17位数字和系数相乘的结果相加
      3. 用加出来和除以11,看余数是多少
      4. 余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2
      5. 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2
      Parameters:
      idcard - 待验证的身份证
      Returns:
      是否有效的18位身份证,忽略x的大小写
    • isValidCard18

      public static boolean isValidCard18(String idcard, boolean ignoreCase)

      判断18位身份证的合法性

      根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。
      排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

      顺序码: 表示在同一地址码所标识的区域范围内,对同年、同月、同 日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配 给女性。

      1. 第1、2位数字表示:所在省份的代码
      2. 第3、4位数字表示:所在城市的代码
      3. 第5、6位数字表示:所在区县的代码
      4. 第7~14位数字表示:出生年、月、日
      5. 第15、16位数字表示:所在地的派出所的代码
      6. 第17位数字表示性别:奇数表示男性,偶数表示女性
      7. 第18位数字是校检码,用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示

      第十八位数字(校验码)的计算方法为:

      1. 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
      2. 将这17位数字和系数相乘的结果相加
      3. 用加出来和除以11,看余数是多少
      4. 余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2
      5. 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2
      Parameters:
      idcard - 待验证的身份证
      ignoreCase - 是否忽略大小写。true则忽略X大小写,否则严格匹配大写。
      Returns:
      是否有效的18位身份证
      Since:
      5.5.7
    • isValidCard15

      public static boolean isValidCard15(String idcard)
      验证15位身份编码是否合法
      Parameters:
      idcard - 身份编码
      Returns:
      是否合法
    • isValidCard10

      public static String[] isValidCard10(String idcard)
      验证10位身份编码是否合法
      Parameters:
      idcard - 身份编码
      Returns:
      身份证信息数组

      [0] - 台湾、澳门、香港 [1] - 性别(男M,女F,未知N) [2] - 是否合法(合法true,不合法false) 若不是身份证件号码则返回null

    • isValidTWCard

      public static boolean isValidTWCard(String idcard)
      验证台湾身份证号码
      Parameters:
      idcard - 身份证号码
      Returns:
      验证码是否符合
    • isValidHKCard

      public static boolean isValidHKCard(String idcard)
      验证香港身份证号码(存在Bug,部份特殊身份证无法检查)

      身份证前2位为英文字符,如果只出现一个英文字符则表示第一位是空格,对应数字58 前2位英文字符A-Z分别对应数字10-35 最后一位校验码为0-9的数字加上字符"A","A"代表10

      将身份证号码全部转换为数字,分别对应乘9-1相加的总和,整除11则证件号码有效

      Parameters:
      idcard - 身份证号码
      Returns:
      验证码是否符合
    • getBirthByIdCard

      public static String getBirthByIdCard(String idcard)
      根据身份编号获取生日,只支持15或18位身份证号码
      Parameters:
      idcard - 身份编号
      Returns:
      生日(yyyyMMdd)
      See Also:
    • getBirth

      public static String getBirth(String idCard)
      根据身份编号获取生日,只支持15或18位身份证号码
      Parameters:
      idCard - 身份编号
      Returns:
      生日(yyyyMMdd)
    • getBirthDate

      public static Date getBirthDate(String idCard)
      从身份证号码中获取生日日期,只支持15或18位身份证号码
      Parameters:
      idCard - 身份证号码
      Returns:
      日期
    • getAgeByIdCard

      public static int getAgeByIdCard(String idcard)
      根据身份编号获取年龄,只支持15或18位身份证号码
      Parameters:
      idcard - 身份编号
      Returns:
      年龄
    • getAgeByIdCard

      public static long getAgeByIdCard(String idcard, Date dateToCompare)
      根据身份编号获取指定日期当时的年龄年龄,只支持15或18位身份证号码
      Parameters:
      idcard - 身份编号
      dateToCompare - 以此日期为界,计算年龄。
      Returns:
      年龄
    • getYearByIdCard

      public static Short getYearByIdCard(String idcard)
      根据身份编号获取生日年,只支持15或18位身份证号码
      Parameters:
      idcard - 身份编号
      Returns:
      生日(yyyy)
    • getMonthByIdCard

      public static Short getMonthByIdCard(String idcard)
      根据身份编号获取生日月,只支持15或18位身份证号码
      Parameters:
      idcard - 身份编号
      Returns:
      生日(MM)
    • getDayByIdCard

      public static Short getDayByIdCard(String idcard)
      根据身份编号获取生日天,只支持15或18位身份证号码
      Parameters:
      idcard - 身份编号
      Returns:
      生日(dd)
    • getGenderByIdCard

      public static int getGenderByIdCard(String idcard)
      根据身份编号获取性别,只支持15或18位身份证号码
      Parameters:
      idcard - 身份编号
      Returns:
      性别(1 : 男 , 0 : 女)
    • getProvinceCodeByIdCard

      public static String getProvinceCodeByIdCard(String idcard)
      根据身份编号获取户籍省份编码,只支持15或18位身份证号码
      Parameters:
      idcard - 身份编码
      Returns:
      省份编码
      Since:
      5.7.2
    • getProvinceByIdCard

      public static String getProvinceByIdCard(String idcard)
      根据身份编号获取户籍省份,只支持15或18位身份证号码
      Parameters:
      idcard - 身份编码
      Returns:
      省份名称。
    • getCityCodeByIdCard

      public static String getCityCodeByIdCard(String idcard)
      根据身份编号获取市级编码,只支持15或18位身份证号码
      Parameters:
      idcard - 身份编码
      Returns:
      市级编码。
    • hide

      public static String hide(String idcard, int startInclude, int endExclude)
      隐藏指定位置的几个身份证号数字为“*”
      Parameters:
      idcard - 身份证号
      startInclude - 开始位置(包含)
      endExclude - 结束位置(不包含)
      Returns:
      隐藏后的身份证号码
      Since:
      3.2.2
      See Also:
    • getIdcardInfo

      public static IdcardUtil.Idcard getIdcardInfo(String idcard)
      获取身份证信息,包括身份、城市代码、生日、性别等
      Parameters:
      idcard - 15或18位身份证
      Returns:
      IdcardUtil.Idcard
      Since:
      5.4.3