中华人民共和国公民身份证一共有18位数,由六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码组成。 其中第十七位奇数分给男性,偶数分给女性,身份证最后一位是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码,其取值范围是0至10,当值等于10时,用罗马数字符X表示。

有些游戏厂商是没有权力接入国家公安系统数据库的,但是有时我们输入错误的身份证号时会提示出错,感觉好像真能识别身份证信息一样。其实游戏厂商只是校验了最后一位数是否符合ISO7064:1983.MOD11-2校验码而已。

下面说一下ISO7064:1983.MOD11-2校验码的具体算法步骤:
假如我们的身份证前17位数是 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7,

  1. 对前17位数字进行加权运算:
    17位数字: 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7
    加权因子 : 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
    计算17位数字与对应的加权因子的乘机和sum:1×7 + 2×9 + 3×10 + 4×5 + 5×8 + 6×4 + 7×2 + 8×1 + 9×6 + 0×3 + 1×7 + 2×9 + 3×10 + 4×5 + 5×8 + 6×4 + 7×2 = 368

  2. 加权运算的和对11取余数:
    368 % 11 = 5;

  3. 12减去余数的差继续对11取余数,得到最后的校验码:
    (12 - 5)%11 = 7;校验码是7
    这18位身份证号应该是:1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 7
    注意:如果最后的校验码如果是10,需要用字母’X’替换。

下满分享一下具体的实现代码:

#include <iostream>
using namespace std;int weight[17] = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };int main()
{int sum = 0;int remainder, crc;int id[17] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7};char idCard[18] = { 0 };for (int idx = 0; idx < 17; idx++){sum += weight[idx] * id[idx];    //计算加权和idCard[idx] = id[idx] + 48;        //将int型数字转化为char字符保存,ascii码字符0-9对应十进制48-57}remainder = sum % 11;crc = (12 - remainder) % 11;/*身份证最后一位如果是10,用X替换*/idCard[17] = (crc != 10) ? (crc + 48) : 88;     //ascii码字符X对应十进制88cout<<"your id is:"<<endl;for (int idx = 0; idx < 18; idx++){cout << idCard[idx] << " ";}cout << endl;return 0;
}

结果显示:

注:ASCII码表连接跳转

身份证最后一位校验算法相关推荐

  1. 身份证最后一位校验算法(ISO 7064:1983.MOD 11-2)

    很多游戏账号申请,或者某些网站注册时需要填身份证号,当输入错误的身份证号时会提示出错,感觉好像真能识别身份证信息一样,其实不然. 实质上由于其没有权限接入公安系统,它只能根据最后一位校验位来判断该身份 ...

  2. 身份证最后一位校验算法-(ISO 7064:1983.MOD 11-2)

    根据<中华人民共和国国家标准GB 11643-1999>中有关公民身份号码的规定,公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码, ...

  3. 身份证号码含义及最后一位校验算法(ISO 7064:1983.MOD 11-2)

    身份证的各位数字代表的含义 ISO 7064:1983.MOD11-2校验码计算法 : (身份证校验码-第18位) 校验码计算(Python 代码) 身份证的各位数字代表的含义 1.前1.2位数字表示 ...

  4. 算法实现身份证最后一位校验码

    一直以为身份证最后几位是随机生成的,今日与人交谈,发现自己太天真了,现在让我们来研究一下身份证最后一位校验码 根据<中华人民共和国国家标准GB 11643-1999>中有关公民身份号码的规 ...

  5. 身份证号码编码方法及校验算法

    身份证号码编码方法及校验算法 1 身份证号码的字段构成: 地址码 身份证前六位,表示户口所在县(市.旗.区)的行政区划代码. 生日码 身份证第七至第十四位,表示出生的年.月.日. 顺序码 身份证十五到 ...

  6. 身份证最后一位校验码

    原文:身份证最后一位校验码 源代码下载地址:http://www.zuidaima.com/share/1734424679222272.htm 18 位身份证最末位是校验码,是按一定的规则产生的,用 ...

  7. Python计算身份证第18位(校验码)来判断身份证是否输入正确

    Python计算身份证第18位(校验码)来判断身份证是否输入正确 前言 身份证编码规则如下:根据[中华人民共和国国家标准GB11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由 ...

  8. 身份证最后一位检验算法

    用python写了一段身份证最后一位校验是否正确. ''' (一)18身份证号码的结构公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生 ...

  9. java 身份证第18位数字的算法

    原来在注册一个网站的时候,发现输入身份证会被验证出来. 即使前面的全正确,但是如果最后一位不正确的话,也会被验证出来的. 原来在身份证的号码,是有规则的.特别是最后一位. 下面是18位身份证最后一位的 ...

  10. 中国大陆18位身份证校验算法(附JS实现)

    大陆18位身份证(第二代身份证)结构:(如下图所示) 身份号码是一组具有特征组合码,由十七位数字本体码和一位校验码组成. 排列顺序从左至右依次为:六位数字地区码,八位数字生日码,三位数字顺序码和一位数 ...

最新文章

  1. Linux下修改MAC地址总结
  2. C#字符串处理插入(Insert)函数
  3. Oracle大的存储层次体系,Oracle 数据库中的逻辑存储层次体系
  4. java多线程(同步和死锁,生产者和消费者问题)
  5. 推荐系统--矩阵分解(3)
  6. 照顾好自己才能照顾好别人_6种照顾数字外观的方法
  7. 【jQuery笔记Part1】11-jQuery选择器
  8. 使用 Fiddler 调试 心知天气,stm32 esp8266获取天气api
  9. 生命科学研究需求推动云计算发展
  10. PNAS:杏仁核个体特异性功能连接:精准精神病学基础
  11. html5 dat.gui,Dat.gui 使用教程
  12. Linux 下编译出现“ln failed to create symbolic link operation not supported”
  13. 车企号脉,资本试药,出行服务带病也要上场
  14. JAVA实现126邮箱发送及部署后发送邮箱报错问题
  15. 实验六 配置GVRP协议
  16. 基于Android+Python Flask框架实现的智慧记单词APP设计
  17. JAVA版 中文地址 识别 切分
  18. 【计算机科学基础】图灵机
  19. mysql密集计算_计算密集型和IO密集型
  20. 照片拼图什么软件好?试试Design Your Collage mac

热门文章

  1. linux yum源配置
  2. vue当前浏览器是否为ie_vue项目检测IE浏览器版本,版本太低给出提示
  3. three.js加载STL格式模型(vue中使用three.js52)
  4. java tracert_超强的Tracert工具(WinMTR)
  5. Hello Guice
  6. MEGA视频目标检测
  7. wechat实现微信聊天机器人
  8. 腾讯信鸽Java服务端推送IOS静默消息的IOS客户端走两个回调的问题
  9. 最新fl studio20.8中文电音编曲宿主制作软件
  10. m3u8播放器-DPlayer,P2P加速 记忆播放