Class CitizenIdKit

java.lang.Object
org.miaixz.bus.core.xyz.CitizenIdKit

public class CitizenIdKit extends Object
身份证相关工具类,参考标准:GB 11643-1999 标准描述见:http://openstd.samr.gov.cn/bzgk/gb/newGbInfo?hcno=080D6FBF2BB468F9007657F26D60013E

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

Since:
Java 17+
Author:
Kimi Liu
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static String
    将15位身份证号码转换为18位 15位身份证号码遵循GB 11643-1989标准。
    static String
    将18位身份证号码转换为15位
    static int
    getAge(String idcard)
    根据身份编号获取年龄,只支持15或18位身份证号码
    static int
    getAge(String idcard, Date dateToCompare)
    根据身份编号获取指定日期当时的年龄年龄,只支持15或18位身份证号码
    static String
    getBirth(String idCard)
    根据身份编号获取生日,只支持15或18位身份证号码
    static DateTime
    从身份证号码中获取生日日期,只支持15或18位身份证号码
    static Short
    根据身份编号获取生日天,只支持15或18位身份证号码
    static Short
    根据身份编号获取生日月,只支持15或18位身份证号码
    static Short
    根据身份编号获取生日年,只支持15或18位身份证号码
    static CIN
    getCIN(String idcard)
    获取公民身份证(CIN)信息,包括身份、城市代码、生日、性别等
    static String
    根据身份编号获取地市级编码,只支持15或18位身份证号码 获取编码为4位
    static String
    根据身份编号获取区县级编码,只支持15或18位身份证号码 获取编码为6位
    static int
    getGender(String idcard)
    根据身份编号获取性别,只支持15或18位身份证号码
    static String
    根据身份编号获取户籍省份,只支持15或18位身份证号码
    static String
    根据身份编号获取户籍省份编码,只支持15或18位身份证号码
    static String
    hide(String idcard, int startInclude, int endExclude)
    隐藏指定位置的几个身份证号数字为“*”
    static boolean
    是否有效身份证号,忽略X的大小写 如果身份证号码中含有空格始终返回false
    static String[]
    验证10位身份编码是否合法
    static boolean
    判断18位身份证的合法性
    static boolean
    isValidCard18(String idcard, boolean ignoreCase)
    判断18位身份证的合法性
    static boolean
    验证香港身份证号码(存在Bug,部份特殊身份证无法检查)
    static boolean
    港澳居民来往内地通行证,俗称:回乡证,通行证号码组成规则: 通行证证件号码共11位。第1位为字母,“H”字头签发给香港居民,“M”字头签发给澳门居民。 第2位至第11位为数字,前8位数字为通行证持有人的终身号,后2位数字表示换证次数,首次发证为00,此后依次递增。 示例:H12345678、M1234567801
    static boolean
    验证台湾身份证号码

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • CitizenIdKit

      public CitizenIdKit()
  • Method Details

    • convert15To18

      public static String convert15To18(String idCard)
      将15位身份证号码转换为18位 15位身份证号码遵循GB 11643-1989标准。
      Parameters:
      idCard - 15位身份编码
      Returns:
      18位身份编码
    • convert18To15

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

      public static boolean isValidCard(String idCard)
      是否有效身份证号,忽略X的大小写 如果身份证号码中含有空格始终返回false
      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
      1. 香港人在大陆的身份证,【810000】开头;同样可以直接获取到 性别、出生日期
      2. 81000019980902013X: 文绎循 男 1998-09-02
      3. 810000201011210153: 辛烨 男 2010-11-21
      1. 澳门人在大陆的身份证,【820000】开头;同样可以直接获取到 性别、出生日期
      2. 820000200009100032: 黄敬杰 男 2000-09-10
      1. 台湾人在大陆的身份证,【830000】开头;同样可以直接获取到 性别、出生日期
      2. 830000200209060065: 王宜妃 女 2002-09-06
      3. 830000194609150010: 苏建文 男 1946-09-14
      4. 83000019810715006X: 刁婉琇 女 1981-07-15
      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位身份证
    • 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:
      验证码是否符合
    • getBirth

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

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

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

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

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

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

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

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

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

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

      public static String getCityCode(String idcard)
      根据身份编号获取地市级编码,只支持15或18位身份证号码 获取编码为4位
      Parameters:
      idcard - 身份编码
      Returns:
      地市级编码
    • getDistrictCode

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

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

      public static CIN getCIN(String idcard)
      获取公民身份证(CIN)信息,包括身份、城市代码、生日、性别等
      Parameters:
      idcard - 15或18位身份证
      Returns:
      CIN
    • isValidHkMoHomeReturn

      public static boolean isValidHkMoHomeReturn(String idCard)
      港澳居民来往内地通行证,俗称:回乡证,通行证号码组成规则:
      • 通行证证件号码共11位。第1位为字母,“H”字头签发给香港居民,“M”字头签发给澳门居民。
      • 第2位至第11位为数字,前8位数字为通行证持有人的终身号,后2位数字表示换证次数,首次发证为00,此后依次递增。
      示例:H12345678、M1234567801

      参考文档《港澳居民来往内地通行证号码规则》: https://www.hmo.gov.cn/fwga_new/wldjnd/201711/t20171120_1333.html

      Parameters:
      idCard - 身份证号码
      Returns:
      是否有效