Package com.luna.common.text
Class IdcardUtil
java.lang.Object
com.luna.common.text.IdcardUtil
- Direct Known Subclasses:
RandomIDCardUtil
身份证相关工具类
see https://www.oschina.net/code/snippet_1611_2881
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
-
Nested Class Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionstatic String
convert15To18
(String idCard) 将15位身份证号码转换为18位static int
getAgeByIdCard
(String idcard) 根据身份编号获取年龄,只支持15或18位身份证号码static long
getAgeByIdCard
(String idcard, Date dateToCompare) 根据身份编号获取指定日期当时的年龄年龄,只支持15或18位身份证号码static String
根据身份编号获取生日,只支持15或18位身份证号码static String
getBirthByIdCard
(String idcard) 根据身份编号获取生日,只支持15或18位身份证号码static Date
getBirthDate
(String idCard) 从身份证号码中获取生日日期,只支持15或18位身份证号码static String
getCityCodeByIdCard
(String idcard) 根据身份编号获取市级编码,只支持15或18位身份证号码static Short
getDayByIdCard
(String idcard) 根据身份编号获取生日天,只支持15或18位身份证号码static int
getGenderByIdCard
(String idcard) 根据身份编号获取性别,只支持15或18位身份证号码static IdcardUtil.Idcard
getIdcardInfo
(String idcard) 获取身份证信息,包括身份、城市代码、生日、性别等static Short
getMonthByIdCard
(String idcard) 根据身份编号获取生日月,只支持15或18位身份证号码static String
getProvinceByIdCard
(String idcard) 根据身份编号获取户籍省份,只支持15或18位身份证号码static String
getProvinceCodeByIdCard
(String idcard) 根据身份编号获取户籍省份编码,只支持15或18位身份证号码static Short
getYearByIdCard
(String idcard) 根据身份编号获取生日年,只支持15或18位身份证号码static String
隐藏指定位置的几个身份证号数字为“*”static boolean
isValidCard
(String idCard) 是否有效身份证号,忽略X的大小写static String[]
isValidCard10
(String idcard) 验证10位身份编码是否合法static boolean
isValidCard15
(String idcard) 验证15位身份编码是否合法static boolean
isValidCard18
(String idcard) 判断18位身份证的合法性static boolean
isValidCard18
(String idcard, boolean ignoreCase) 判断18位身份证的合法性static boolean
isValidHKCard
(String idcard) 验证香港身份证号码(存在Bug,部份特殊身份证无法检查)static boolean
isValidTWCard
(String idcard) 验证台湾身份证号码
-
Constructor Details
-
IdcardUtil
public IdcardUtil()
-
-
Method Details
-
convert15To18
将15位身份证号码转换为18位- Parameters:
idCard
- 15位身份编码- Returns:
- 18位身份编码
-
isValidCard
是否有效身份证号,忽略X的大小写- 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
- 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位身份证
- Since:
- 5.5.7
-
isValidCard15
验证15位身份编码是否合法- Parameters:
idcard
- 身份编码- Returns:
- 是否合法
-
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:
- 验证码是否符合
-
getBirthByIdCard
根据身份编号获取生日,只支持15或18位身份证号码- Parameters:
idcard
- 身份编号- Returns:
- 生日(yyyyMMdd)
- See Also:
-
getBirth
根据身份编号获取生日,只支持15或18位身份证号码- Parameters:
idCard
- 身份编号- Returns:
- 生日(yyyyMMdd)
-
getBirthDate
从身份证号码中获取生日日期,只支持15或18位身份证号码- Parameters:
idCard
- 身份证号码- Returns:
- 日期
-
getAgeByIdCard
根据身份编号获取年龄,只支持15或18位身份证号码- Parameters:
idcard
- 身份编号- Returns:
- 年龄
-
getAgeByIdCard
根据身份编号获取指定日期当时的年龄年龄,只支持15或18位身份证号码- Parameters:
idcard
- 身份编号dateToCompare
- 以此日期为界,计算年龄。- Returns:
- 年龄
-
getYearByIdCard
根据身份编号获取生日年,只支持15或18位身份证号码- Parameters:
idcard
- 身份编号- Returns:
- 生日(yyyy)
-
getMonthByIdCard
根据身份编号获取生日月,只支持15或18位身份证号码- Parameters:
idcard
- 身份编号- Returns:
- 生日(MM)
-
getDayByIdCard
根据身份编号获取生日天,只支持15或18位身份证号码- Parameters:
idcard
- 身份编号- Returns:
- 生日(dd)
-
getGenderByIdCard
根据身份编号获取性别,只支持15或18位身份证号码- Parameters:
idcard
- 身份编号- Returns:
- 性别(1 : 男 , 0 : 女)
-
getProvinceCodeByIdCard
根据身份编号获取户籍省份编码,只支持15或18位身份证号码- Parameters:
idcard
- 身份编码- Returns:
- 省份编码
- Since:
- 5.7.2
-
getProvinceByIdCard
根据身份编号获取户籍省份,只支持15或18位身份证号码- Parameters:
idcard
- 身份编码- Returns:
- 省份名称。
-
getCityCodeByIdCard
根据身份编号获取市级编码,只支持15或18位身份证号码- Parameters:
idcard
- 身份编码- Returns:
- 市级编码。
-
hide
隐藏指定位置的几个身份证号数字为“*”- Parameters:
idcard
- 身份证号startInclude
- 开始位置(包含)endExclude
- 结束位置(不包含)- Returns:
- 隐藏后的身份证号码
- Since:
- 3.2.2
- See Also:
-
getIdcardInfo
获取身份证信息,包括身份、城市代码、生日、性别等- Parameters:
idcard
- 15或18位身份证- Returns:
IdcardUtil.Idcard
- Since:
- 5.4.3
-