Package org.aoju.bus.core.toolkit
Class CitizenIdKit
java.lang.Object
org.aoju.bus.core.toolkit.CitizenIdKit
-
Nested Class Summary
Nested Classes -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic intgetAgeByIdCard(String idcard) 根据身份编号获取年龄,只支持15或18位身份证号码static intgetAgeByIdCard(String idcard, Date dateToCompare) 根据身份编号获取指定日期当时的年龄,只支持15或18位身份证号码static StringgetBirthByIdCard(String idcard) 根据身份编号获取生日,只支持15或18位身份证号码getCitizenInfo(String idcard) 获取公民身份相关信息static StringgetCityCodeByIdCard(String idcard) 根据身份编号获取地市级编码,只支持15或18位身份证号码 获取编码为4位static ShortgetDayByIdCard(String idcard) 根据身份编号获取生日天,只支持15或18位身份证号码static StringgetDistrictCodeByIdCard(String idcard) 根据身份编号获取区县级编码,只支持15或18位身份证号码 获取编码为6位static intgetGenderByIdCard(String idcard) 根据身份编号获取性别,只支持15或18位身份证号码static StringgetIdCardTo18(String idcard) 将15位身份证号码转换为18位static ShortgetMonthByIdCard(String idcard) 根据身份编号获取生日月,只支持15或18位身份证号码static StringgetProvinceByIdCard(String idcard) 根据身份编号获取户籍省份,只支持15或18位身份证号码static ShortgetYearByIdCard(String idcard) 根据身份编号获取生日年,只支持15或18位身份证号码static String隐藏指定位置的几个身份证号数字为“*”static booleanisValidCard(String idcard) 是否有效身份证号,忽略X的大小写 如果身份证号码中含有空格始终返回falsestatic String[]isValidCard10(String idcard) 验证10位身份编码是否合法static booleanisValidCard15(String idcard) 验证15位身份编码是否合法static booleanisValidCard18(String idcard) 判断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-15static booleanisValidCard18(String idcard, boolean ignoreCase) 判断18位身份证的合法性static booleanisValidHKCard(String idcard) 验证香港身份证号码(存在Bug,部份特殊身份证无法检查)static booleanisValidTWCard(String idcard) 验证台湾身份证号码
-
Constructor Details
-
CitizenIdKit
public CitizenIdKit()
-
-
Method Details
-
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- 是否忽略大小写- Returns:
- 是否有效的18位身份证
-
isValidCard15
验证15位身份编码是否合法- Parameters:
idcard- 身份编码- Returns:
- 是否合法
-
isValidCard10
-
isValidTWCard
验证台湾身份证号码- Parameters:
idcard- 身份证号码- Returns:
- 验证码是否符合
-
isValidHKCard
验证香港身份证号码(存在Bug,部份特殊身份证无法检查)身份证前2位为英文字符,如果只出现一个英文字符则表示第一位是空格,对应数字58 前2位英文字符A-Z分别对应数字10-35 最后一位校验码为0-9的数字加上字符"A","A"代表10
将身份证号码全部转换为数字,分别对应乘9-1相加的总和,整除11则证件号码有效
- Parameters:
idcard- 身份证号码- Returns:
- 验证码是否符合
-
getBirthByIdCard
-
getAgeByIdCard
根据身份编号获取年龄,只支持15或18位身份证号码- Parameters:
idcard- 身份编号- Returns:
- 年龄
-
getAgeByIdCard
-
getYearByIdCard
-
getMonthByIdCard
-
getDayByIdCard
-
getGenderByIdCard
根据身份编号获取性别,只支持15或18位身份证号码- Parameters:
idcard- 身份编号- Returns:
- 性别(1 : 男, 0 : 女)
-
getProvinceByIdCard
-
getCityCodeByIdCard
-
getDistrictCodeByIdCard
-
hide
-
getIdCardTo18
-
getCitizenInfo
获取公民身份相关信息- Parameters:
idcard- 身份号码- Returns:
- 身份信息
-