Java 身份证号码验证

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/asing1elife/article/details/82915005

对身份证号码前 17 位通过一段算法规则进行计算,可得出身份证号码最后 1 位的值
所以身份证号码最后一位实际上是身份证号码校验码

更多精彩

结构

  1. 地址码 - 6 位
    • 表示编码对象常住户口所在市区县的行政区域划分代码
    • 按 GB/T2260 规定执行
  2. 出生日期码 - 8 位
    • 表示编码对象出生的年月日
    • 按 GB/T7408 规定执行
  3. 顺序码 - 3 位
    • 表示在他同一地址码所标识的区域范围内,对同年同月同日出生的人编订的顺序码
    • 顺序码奇数为男生,偶数为女生
  4. 校验码 - 1 位
    1. 前 17 位数字本体码加权求和
      • S = Sum(Ai * Wi)
      • Ai : 表示 0 - 17 位身份证号码的数值 0 - 9
      • Wi : 表示 0 - 17 位身份证号码的加权因子 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
    2. 根据求和结果计算模
      • Y = mod(S, 11)
    3. 根据模查找对应校验码
      • Y 0 1 2 3 4 5 6 7 8 9 10
      • 校验码 1 0 X 9 8 7 6 5 4 3 2

实现

  1. 通过计算获取第 18 位的校验码
// 十七位数字本体码权重
int[] weight = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
// mod 对应校验码字符值
char[] validate = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};

public char getValidateCode(String id17) {
    int sum = 0;
    int mode = 0;

    for (int i = 0; i < id17.length(); i++) {
        sum = sum + Integer.parseInt(String.valueOf(id17.charAt(i))) * weight[i];
    }

    mode = sum % 11;
    return validate[mode];
}
展开阅读全文

没有更多推荐了,返回首页