⾝份证号码编码规则及校验位校验算法
⼀、⾝份证号码作为独⼀⽆⼆代表公民信息的号码,它的组成是由⼀下的数字表⽰的:
母亲节是每年的哪一天
(1)第1、2位数字表⽰:所在省(直辖市、⾃治区)的代码
(2)第3、4位数字表⽰:所在地级市(⾃治州)的代码;
(3)第5、6位数字表⽰:所在区(县、⾃治县、县级市)的代码;
(4)第7—14位数字表⽰:出⽣年、⽉、⽇;
(5)第15、16位数字表⽰:所在地的派出所的代码;
(6)第17位数字表⽰性别:奇数表⽰男性,偶数表⽰⼥性;
(7)第18位数字是校检码:是根据《中华⼈民共和国国家标准GB 11643-1999》中有关公民⾝份号码的规定,根据精密的计算公式计算出来的。
⼆、校验码的计算⽅法:
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,其中的X是罗马数字10;
5、通过上⾯得知如果余数是2,就会在⾝份证的第18位数字上出现罗马数字的Ⅹ;如果余数是10,⾝份证的最后⼀位号码就是2
/**
* ⾝份证验证规则:
* 第⼗⼋位数字(校验码)的计算⽅法为:
* 1.将前⾯的⾝份证号码17位数分别乘以不同的系数。从第⼀位到第⼗七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
* 2.将这17位数字和系数相乘的结果相加与11进⾏相除。
* 3.余数0 1 2 3 4 5 6 7 8 9 10这11个数字,其分别对应的最后⼀位⾝份证的号码为1 0 X 9 8 7 6 5 4 3 2。
* 4.例如 余数为 0 , 则⾝份证最后⼀位就是1
*      余数为 2 , 则⾝份证最后⼀位就是罗马数字X
*      余数为 10 , 则⾝份证最后⼀位就是2
wifi信号增强器
* @ClassName: IdCardUtil
不能换头像了* @date: 2019/10/24 17:10
*/
@Slf4j一直开车的甜日剧
public class IdCardUtil {
/**
* 校验是否为⾝份证号码
* @param IdCardNo
* @return
*/
public static  boolean isIdCardNo(String IdCardNo){
boolean IdCardflag =  false;
try {
if (!StringUtils.isEmpty(IdCardNo) && IdCardNo.length() == 18){
// 1.将⾝份证号码前⾯的17位数分别乘以不同的系数。
int[] coefficientArr = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
int sum = 0;
for (int i = 0; i < coefficientArr.length; i++) {
// Character.digit 在指定的基数返回字符ch的数值。如果基数是不在范围内MIN_RADIX≤基数≤MAX_RADIX或如果该值的通道是不是⼀个有效的数字在指定的基数-1,则返回。
// ch - the character to be converted(要转换的字符)
// ch - the character to be converted(要转换的字符)
// ch - int类型,是字符的ASCII码,数字的ASCII码是48-57
// radix - the radix(基数) ----也就是进制数
sum += Character.digit(IdCardNo.charAt(i), 10) * coefficientArr[i];                }
老师节日快乐祝福语简短
// 余数数组
int[] remainderArr = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
// ⾝份证号码第18位数组
int[] lastArr = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
String matchDigit = "";
for (int i = 0; i < remainderArr.length; i++) {
大专毕业生自我鉴定int j = remainderArr[i];
if (j == sum % 11) {
matchDigit = String.valueOf(lastArr[i]);
if (lastArr[i] > 57) {
matchDigit = String.valueOf((char) lastArr[i]);
}
}
}
if (matchDigit.equals(IdCardNo.substring(IdCardNo.length() - 1))) {                    IdCardflag =  true;
}
}
}catch (Exception e) {
<(String.format("校验⾝份证出现异常%s",e));
}
return  IdCardflag;
}
/**
* ⾝份证号码脱敏 只脱敏⽉⽇四位
*/
public  static  String getNewIdCardNo(String IdCardNo){
String IdCardNoTemmp = IdCardNo;
if (isIdCardNo(IdCardNo)){
StringBuilder sb = new StringBuilder(IdCardNo);
IdCardNoTemmp = sb.toString();
}
return IdCardNoTemmp;
}
}