Package org.miaixz.bus.core.xyz
Class CitizenIdKit
java.lang.Object
org.miaixz.bus.core.xyz.CitizenIdKit
身份证相关工具类,参考标准: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 -
Method Summary
Modifier and TypeMethodDescriptionstatic Stringconvert15To18(String idCard) 将15位身份证号码转换为18位 15位身份证号码遵循GB 11643-1989标准。static Stringconvert18To15(String idCard) 将18位身份证号码转换为15位static int根据身份编号获取年龄,只支持15或18位身份证号码static int根据身份编号获取指定日期当时的年龄年龄,只支持15或18位身份证号码static String根据身份编号获取生日,只支持15或18位身份证号码static DateTimegetBirthDate(String idCard) 从身份证号码中获取生日日期,只支持15或18位身份证号码static ShortgetBirthDay(String idcard) 根据身份编号获取生日天,只支持15或18位身份证号码static ShortgetBirthMonth(String idcard) 根据身份编号获取生日月,只支持15或18位身份证号码static ShortgetBirthYear(String idcard) 根据身份编号获取生日年,只支持15或18位身份证号码static CIN获取公民身份证(CIN)信息,包括身份、城市代码、生日、性别等static StringgetCityCode(String idcard) 根据身份编号获取地市级编码,只支持15或18位身份证号码 获取编码为4位static StringgetDistrictCode(String idcard) 根据身份编号获取区县级编码,只支持15或18位身份证号码 获取编码为6位static int根据身份编号获取性别,只支持15或18位身份证号码static StringgetProvince(String idcard) 根据身份编号获取户籍省份,只支持15或18位身份证号码static StringgetProvinceCode(String idcard) 根据身份编号获取户籍省份编码,只支持15或18位身份证号码static String隐藏指定位置的几个身份证号数字为“*”static booleanisValidCard(String idCard) 是否有效身份证号,忽略X的大小写 如果身份证号码中含有空格始终返回falsestatic String[]isValidCard10(String idcard) 验证10位身份编码是否合法static booleanisValidCard18(String idcard) 判断18位身份证的合法性static booleanisValidCard18(String idcard, boolean ignoreCase) 判断18位身份证的合法性static booleanisValidHKCard(String idcard) 验证香港身份证号码(存在Bug,部份特殊身份证无法检查)static booleanisValidHkMoHomeReturn(String idCard) 港澳居民来往内地通行证,俗称:回乡证,通行证号码组成规则: 通行证证件号码共11位。第1位为字母,“H”字头签发给香港居民,“M”字头签发给澳门居民。 第2位至第11位为数字,前8位数字为通行证持有人的终身号,后2位数字表示换证次数,首次发证为00,此后依次递增。 示例:H12345678、M1234567801static booleanisValidTWCard(String idcard) 验证台湾身份证号码
-
Constructor Details
-
CitizenIdKit
public CitizenIdKit()
-
-
Method Details
-
convert15To18
将15位身份证号码转换为18位 15位身份证号码遵循GB 11643-1989标准。- Parameters:
idCard- 15位身份编码- Returns:
- 18位身份编码
-
convert18To15
将18位身份证号码转换为15位- Parameters:
idCard- 18位身份编码- Returns:
- 15位身份编码
-
isValidCard
是否有效身份证号,忽略X的大小写 如果身份证号码中含有空格始终返回false- Parameters:
idCard- 身份证号,支持18位、15位和港澳台的10位- Returns:
- 是否有效
-
isValidCard18
判断18位身份证的合法性
根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。顺序码: 表示在同一地址码所标识的区域范围内,对同年、同月、同 日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配 给女性。
- 第1、2位数字表示:所在省份的代码
- 第3、4位数字表示:所在城市的代码
- 第5、6位数字表示:所在区县的代码
- 第7~14位数字表示:出生年、月、日
- 第15、16位数字表示:所在地的派出所的代码
- 第17位数字表示性别:奇数表示男性,偶数表示女性
- 第18位数字是校检码,用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示
第十八位数字(校验码)的计算方法为:
- 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
- 将这17位数字和系数相乘的结果相加
- 用加出来和除以11,看余数是多少
- 余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2
- 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2
- 香港人在大陆的身份证,【810000】开头;同样可以直接获取到 性别、出生日期
- 81000019980902013X: 文绎循 男 1998-09-02
- 810000201011210153: 辛烨 男 2010-11-21
- 澳门人在大陆的身份证,【820000】开头;同样可以直接获取到 性别、出生日期
- 820000200009100032: 黄敬杰 男 2000-09-10
- 台湾人在大陆的身份证,【830000】开头;同样可以直接获取到 性别、出生日期
- 830000200209060065: 王宜妃 女 2002-09-06
- 830000194609150010: 苏建文 男 1946-09-14
- 83000019810715006X: 刁婉琇 女 1981-07-15
- Parameters:
idcard- 待验证的身份证- Returns:
- 是否有效的18位身份证,忽略x的大小写
-
isValidCard18
判断18位身份证的合法性
根据〖中华人民共和国国家标准GB11643-1999〗中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。顺序码: 表示在同一地址码所标识的区域范围内,对同年、同月、同 日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配 给女性。
- 第1、2位数字表示:所在省份的代码
- 第3、4位数字表示:所在城市的代码
- 第5、6位数字表示:所在区县的代码
- 第7~14位数字表示:出生年、月、日
- 第15、16位数字表示:所在地的派出所的代码
- 第17位数字表示性别:奇数表示男性,偶数表示女性
- 第18位数字是校检码,用来检验身份证的正确性。校检码可以是0~9的数字,有时也用x表示
第十八位数字(校验码)的计算方法为:
- 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
- 将这17位数字和系数相乘的结果相加
- 用加出来和除以11,看余数是多少
- 余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2
- 通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的Ⅹ。如果余数是10,身份证的最后一位号码就是2
- Parameters:
idcard- 待验证的身份证ignoreCase- 是否忽略大小写。true则忽略X大小写,否则严格匹配大写。- Returns:
- 是否有效的18位身份证
-
isValidCard10
验证10位身份编码是否合法- Parameters:
idcard- 身份编码- Returns:
- 身份证信息数组
[0] - 台湾、澳门、香港 [1] - 性别(男M,女F,未知N) [2] - 是否合法(合法true,不合法false) 若不是身份证件号码则返回null
-
isValidTWCard
验证台湾身份证号码- Parameters:
idcard- 身份证号码- Returns:
- 验证码是否符合
-
isValidHKCard
验证香港身份证号码(存在Bug,部份特殊身份证无法检查)身份证前2位为英文字符,如果只出现一个英文字符则表示第一位是空格,对应数字58 前2位英文字符A-Z分别对应数字10-35 最后一位校验码为0-9的数字加上字符"A","A"代表10
将身份证号码全部转换为数字,分别对应乘9-1相加的总和,整除11则证件号码有效
- Parameters:
idcard- 身份证号码- Returns:
- 验证码是否符合
-
getBirth
根据身份编号获取生日,只支持15或18位身份证号码- Parameters:
idCard- 身份编号- Returns:
- 生日(yyyyMMdd)
-
getBirthDate
从身份证号码中获取生日日期,只支持15或18位身份证号码- Parameters:
idCard- 身份证号码- Returns:
- 日期
-
getAge
根据身份编号获取年龄,只支持15或18位身份证号码- Parameters:
idcard- 身份编号- Returns:
- 年龄
-
getAge
根据身份编号获取指定日期当时的年龄年龄,只支持15或18位身份证号码- Parameters:
idcard- 身份编号dateToCompare- 以此日期为界,计算年龄。- Returns:
- 年龄
-
getBirthYear
根据身份编号获取生日年,只支持15或18位身份证号码- Parameters:
idcard- 身份编号- Returns:
- 生日(yyyy)
-
getBirthMonth
根据身份编号获取生日月,只支持15或18位身份证号码- Parameters:
idcard- 身份编号- Returns:
- 生日(MM)
-
getBirthDay
根据身份编号获取生日天,只支持15或18位身份证号码- Parameters:
idcard- 身份编号- Returns:
- 生日(dd)
-
getGender
根据身份编号获取性别,只支持15或18位身份证号码- Parameters:
idcard- 身份编号- Returns:
- 性别(1 : 男 , 0 : 女)
-
getProvinceCode
根据身份编号获取户籍省份编码,只支持15或18位身份证号码- Parameters:
idcard- 身份编码- Returns:
- 省份编码
-
getProvince
根据身份编号获取户籍省份,只支持15或18位身份证号码- Parameters:
idcard- 身份编码- Returns:
- 省份名称。
-
getCityCode
根据身份编号获取地市级编码,只支持15或18位身份证号码 获取编码为4位- Parameters:
idcard- 身份编码- Returns:
- 地市级编码
-
getDistrictCode
根据身份编号获取区县级编码,只支持15或18位身份证号码 获取编码为6位- Parameters:
idcard- 身份编码- Returns:
- 地市级编码
-
hide
隐藏指定位置的几个身份证号数字为“*”- Parameters:
idcard- 身份证号startInclude- 开始位置(包含)endExclude- 结束位置(不包含)- Returns:
- 隐藏后的身份证号码
- See Also:
-
getCIN
获取公民身份证(CIN)信息,包括身份、城市代码、生日、性别等- Parameters:
idcard- 15或18位身份证- Returns:
CIN
-
isValidHkMoHomeReturn
港澳居民来往内地通行证,俗称:回乡证,通行证号码组成规则:- 通行证证件号码共11位。第1位为字母,“H”字头签发给香港居民,“M”字头签发给澳门居民。
- 第2位至第11位为数字,前8位数字为通行证持有人的终身号,后2位数字表示换证次数,首次发证为00,此后依次递增。
参考文档《港澳居民来往内地通行证号码规则》: https://www.hmo.gov.cn/fwga_new/wldjnd/201711/t20171120_1333.html
- Parameters:
idCard- 身份证号码- Returns:
- 是否有效
-