WarMj:身份证号校验公式

作者: WarMj | 来源:发表于2017-08-27 15:44 被阅读0次

原理:

身份证号的最后一位是根据前 17 位数字计算出来的,具有唯一性。

计算方式:

将身份证号的 { [第 1 个数字 * (2^17/11) 的余数] + [第 2 个数字 * (2^16/11)的余数] + …+ [第 17 个数字 * (2^1/11)的余数] } ,将所得的数除以 11 后,得到的余数按照

余数 转化后
0 1
1 0
2 X
3 9
4 8
5 7
6 6
7 5
8 4
9 3
10 2

依次对应。最后的结果就是第 18 位身份证号校验位。

公式代码:

Excel公式

=LOOKUP(MOD(MID(B3,1,1)*MOD(2^17,11)+MID(B3,2,1)*MOD(2^16,11)+MID(B3,3,1)*MOD(2^15,11)+MID(B3,4,1)*MOD(2^14,11)+MID(B3,5,1)*MOD(2^13,11)+MID(B3,6,1)*MOD(2^12,11)+MID(B3,7,1)*MOD(2^11,11)+MID(B3,8,1)*MOD(2^10,11)+MID(B3,9,1)*MOD(2^9,11)+MID(B3,10,1)*MOD(2^8,11)+MID(B3,11,1)*MOD(2^7,11)+MID(B3,12,1)*MOD(2^6,11)+MID(B3,13,1)*MOD(2^5,11)+MID(B3,14,1)*MOD(2^4,11)+MID(B3,15,1)*MOD(2^3,11)+MID(B3,16,1)*MOD(2^2,11)+MID(B3,17,1)*MOD(2^1,11),11),{0;1;2;3;4;5;6;7;8;9;10},{1;0;"X";9;8;7;6;5;4;3;2})

C语言代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int reIdNum(char id[]){
    char check = '1';
    int i = 16, sum = 0, result;
    
    for(i = 16; i >= 0; i--){
        sum += ( (id[16-i] - '0') *  (int(pow(2,(i+1))) % 11) );
    }
    
    switch (sum % 11){
        case 0  : check = '1';  break;
        case 1  : check = '2';  break;
        case 2  : check = 'X';  break;
        case 3  : check = '9';  break;
        case 4  : check = '8';  break;
        case 5  : check = '7';  break;
        case 6  : check = '6';  break;
        case 7  : check = '5';  break;
        case 8  : check = '4';  break;
        case 9  : check = '3';  break;
        case 10 : check = '2';  break;
    }
    
    if(id[17] == check){
        result = 1;
    }else{
        result = 0;
    }
    
    return (result);
}

int main(){
    char id[19];

    puts("Please enter IdNumber:");
    scanf("%s", id);

    if(reIdNum(id)){
        puts("The IdNumber is ture.");
    }else{
        puts("The IdNumber is false.");
    }
    
    system("pause");
    return (0);
}

相关文章

  • WarMj:身份证号校验公式

    原理: 身份证号的最后一位是根据前 17 位数字计算出来的,具有唯一性。 计算方式: 将身份证号的 { [第 1 ...

  • luhn算法

    Luhn 算法或是Luhn 公式,也被称作“模10算法”。它是一种简单的校验公式,一般会被用于银行卡,身份证号码,...

  • 基础工具方法记录

    身份证号正则校验 手机号校验 座机号校验 json序列化处理

  • js常用正则校验

    1、校验手机号 2、校验身份证号 3、校验护照号 4、校验字母和英文 5、校验字母+英文(5-6位)

  • iOS-swift3.0 点滴积累:身份证号码校验

    身份证号码校验,server端和app端都可以实现。下面实现swift3.0 校验身份证号码是否合法。用swfit...

  • JAVA校验身份证号码

    以下为java校验身份证号码的代码:

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

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

  • iOS开发常用工具类

    关于正则表达式判断: 1.手机号校验 2.传真、固话校验 3.车牌号校验 4.身份证号码校验 5.ip地址校验 6...

  • IOS 正则表达式验证

    转载自 广告比较多的网站 一、对邮箱进行校验 二、对身份证号进行校验 三、对固话进行校验 eg:010-8877...

  • iOS开发:身份证号码性别判断

    总结:15位身份证号码,第15位为性别校验位,奇数为男,偶数为女18位身份证号码,第17位为性别校验位,奇数为男,...

网友评论

    本文标题:WarMj:身份证号校验公式

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