美文网首页
一个身份证校验工具类(包括省份和校验码)

一个身份证校验工具类(包括省份和校验码)

作者: 好学人 | 来源:发表于2020-01-20 15:41 被阅读0次

本文从身份证的基本格式、省份、校验码三个维度校验一个身份证号码是否有效。

身份证号码的编码规则

二代身份证号码共18位,由17位本体码和1位校验码组成。

  1. 前6位是地址码(前2位表示省份),表示登记户口时所在地的行政区划代码。

  2. 第7到14位是出生年月日,采用YYYYMMDD格式。

  3. 第15到17位是顺序码,表示在同一地址码所标识的区域范围内同一天出生的人编订的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

  4. 第18位为校验码,计算规划为对前17位加权求和,然后对11取余数,再根据余数映射表确定最后一位校验码(详见代码)。

校验身份证的基本格式

/**
 * 对身份证号码的基本格式进行验证
 */
public static boolean checkIdCardByRegex(String idCard) {
    String regex = "^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(idCard);
    return matcher.matches();
}

校验身份证的省份

/**
 * 根据省份检验用户的身份证号码是否有效
 */
private static boolean checkByProvince(String idCard) {
    String regex = "(11|12|13|14|15|21|22|23|31|32|33|34|35|36|37|41|42|43|44|45|46|50|51|52|53|54|61|62|63|64|65|71|81|82)[0-9]{15}([0-9xX])";
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(idCard);
    return matcher.matches();
}

校验身份证的校验码

/**
 * 校验18位身份证号码最后一位校验码是否有效
 */
public static boolean checkIdCardBySum(String idCard) {
    int[] weight = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; // 身份证前17位第一位对应的权重
    char[] checkCode = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'}; // 校验码映射表
    char[] charArray = idCard.toUpperCase().toCharArray(); // 统一转换为大写
    int sum = 0;
    for (int index = 0; index < charArray.length - 1; index++) {
        int charInt = charArray[index] - '0';
        int item = charInt * weight[index]; // 计算每一位对应的权重
        sum = sum + item;
    }
    char checkChar = checkCode[sum % 11]; // 计算校验码
    char lastChar = idCard.charAt(idCard.length() - 1);
    return checkChar == lastChar;
}

相关文章

  • 一个身份证校验工具类(包括省份和校验码)

    本文从身份证的基本格式、省份、校验码三个维度校验一个身份证号码是否有效。 身份证号码的编码规则 二代身份证号码共1...

  • 用 Go 计算身份证的校验码

    身份证校验码是根据前面十七位数字码,按照 ISO 7064:1983.MOD 11-2 中的校验码计算方法来确定的。

  • PAT (Basic Level):1031 查验身份证(15)

    题目信息 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17...

  • 2018-10-23查验身份证(15)

    题目描述 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17...

  • L1-016 查验身份证

    题目描述 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前1...

  • PTA 1031 查验身份证 (15 分)

    题目 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位...

  • L1_016查验身份证

    一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权...

  • L1-016. 查验身份证(巧妙减少switch语句)

    一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加...

  • 1031 查验身份证 (15分)(Python)

    一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加...

  • 1031 查验身份证

    一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下: 首先对前17位数字加...

网友评论

      本文标题:一个身份证校验工具类(包括省份和校验码)

      本文链接:https://www.haomeiwen.com/subject/jsvjzctx.html