前言:

由于在某些时候,可能需要用户输入真实的身份证号,但是用户可能会胡乱输入虚假的身份证号,导致信息的不真实性,所以为了防止用户胡乱输入,可以通过一些小方法来检测身份证号是否输入正确,本文将介绍一种方法——检测效验码,来检测身份证号码的准确性。

方法:

1.将身份证号码前17位数分别乘以下面系数列表对应的数 结果之和并除以11,得到余数。

第1位到第17位的系数分别为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。

2.余数只可能有0 、1、 2、 3、 4、 5、 6、 7、 8、 9、 10这11个数字。

其分别对应的身份证号最后一位(效验码 共11种)的列表:1、0、X、9、8、7、6、5、4、3、2。

余数:       0 1 2 3 4 5 6 7 8 9 10
效验码列表: 1 0 X 9 8 7 6 5 4 3 2

所以我们以身份证号:310107198607081310 为例来讲解

如上所示身份证号的前17位数分别与系数列表各位相对应,红色数字为身份证效验码,分别相乘得到乘积及总和。

然后将265除以11得到的余数1与效验码列表进行对应,得到效验码是0,所以与提供的身份证号的最后一位相同,即正确的身份证号。

下面附上用C++进行实现该检测程序的代码:(望dalao们不要吐槽代码质量~)

/*
检验18位身份证号是否正确用于测试的身份证:
正确 身份证:310107198607081310
错误 身份证:310107198507081310
*/#include <iostream>
#include <cctype>bool verifyIdCard(const char* idCard);int main(void){char idCardTemp[19];    //用于存储18位身份证字符串std::cin.getline(idCardTemp,19);if(verifyIdCard(idCardTemp)){std::cout << "ID Card - Good!" << std::endl;    //身份证正确则输出}else{std::cout << "ID Card - Error!" << std::endl;    //身份证错误则输出}return 0;
}bool verifyIdCard(const char* idCard){if(strlen(idCard) != 18){    //检测当前身份证是否为18位return false;}else{int coefficient[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};                //身份证前17位对应的系数列表char checkCodeList[] = {'1','0','X','9','8','7','6','5','4','3','2'};    //余数所对应的效验码列表int Sum = 0;int remainder;char checkCodeValue;for(int i=0;i<17;++i){Sum += (idCard[i]-48) * coefficient[i];   //身份证前17位分别与对应的系数相乘之和}remainder = Sum % 11;  //取余数checkCodeValue = checkCodeList[remainder];    //余数只会是[0,10] 计算得到身份证最后一位 效验码if(checkCodeValue == 'X'){  //用于效验码是'X'的一些处理if(checkCodeValue == std::toupper(idCard[17])){return true;}else{return false;}}else{if(checkCodeValue == idCard[17]){return true;}else{return false;}}}
};

当然,该检测方法,只能降低用户提供虚假的信息可能性,但不能完全确保用户提供的身份信息不是虚假的。

身份证号第18位(效验码)计算方法 用于检测身份证号是否正确相关推荐

  1. 【SQLServer】验证身份证号第18位校验码是否合法

    目录 1.业务场景 2.知识前提 3.实现方案 4.测试 5.参考链接 1.业务场景 参考国家标准GB 11643-1999,居民身份证号组成:6位数字地址码+8位数字出生日期码+3位数字顺序码+1位 ...

  2. 18位身份证号码最后一位校验码的计算方法

    介绍18位身份证号码最后一位校验码的计算方法 公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码. ...

  3. JAVA代码实现身份证18位校验码合法性校验

    身份证第18位(校验码)的计算方法 1.将前面的身份证号码17位数分别乘以不同的系数.从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2. 2.将这 ...

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

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

  5. Java身份证号码严格验证(第18位校验码算法实现)

    /*** 身份证号码的格式:610821-20061222-612-X 由18位数字组成:前6位为地址码,第7至14位为出生日期码,第15至17位为顺序码,* 第18位为校验码.检验码分别是0-10共 ...

  6. 二代身份证号码最后一位校验位的计算方法

    第二代身份证号码第十八位数字的计算方法为: 一. 将前面的身份证号码17位数分别乘以不同的系数.从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ...

  7. 16Aspx.com-将15位身份证转换成18位

    16Aspx.com-将15位身份证转换成18位 //************************************************************************* ...

  8. 身份证号码是18位数字字符构成的字符串,输入一个身份证号码判断该号码拥有者的性别

    /*身份证号码是18位数字字符构成的字符串,输入一个身份证号码判断该号码拥有者的性别 提示:第17为数字字符奇数为男,偶数为女 */ #include #include #include #inclu ...

  9. Excel如何快速将15位身份证号码转为18位

    今天跟大家分享一下Excel如何快速将15位身份证号码转为18位 ​ 1.首先我们选中身份证号码单元格区域 2.点击[DIY工具箱] 3.点击[身份证]选择[15位身份证证升18位] 4.点击[确定] ...

最新文章

  1. 第10课--10_04_LVM之二
  2. 怎么发表论文能保证被收录
  3. 一个设计反模式——究竟什么是轮子理论
  4. 计算机小狐狸操作,小狐狸发明记之叮咚快跑新手攻略 快速上手游戏
  5. OSGI 插件操作命令
  6. Linux网络编程——tcp并发服务器(poll实现)
  7. java spring注解_spring注解是如何实现的?
  8. 实战 es6_腾讯云 Elasticsearch 实战篇(二十二) ES6.8权限使用配置
  9. Codeforces Round #148 (Div. 2)
  10. 怎样通过Java程序提交yarn的mapreduce计算任务
  11. Project Euler 102:Triangle containment 包含原点的三角形
  12. 如何将网页实现变灰效果?
  13. 如何在 Mac 上的 Pages 文稿中格式化文本栏?
  14. Win10值得推荐的软件,提升效率和桌面美观
  15. 电气专业学校排名全国计算机专业学校排名,电气工程及其自动化专业学校排名...
  16. ubuntu 22.04安装微信QQ阿里旺旺等
  17. 手动释放linux缓存——/proc/sys/vm/drop_caches
  18. vue3.0 axios 图片上传
  19. 利用AUI实现多种多样的timeline时间轴样式
  20. 最新版CameraX入门(拍照、存储展示、切换前后摄像头、手电筒、闪光灯、手势伸缩、双击放大缩小)

热门文章

  1. 深刻理解Linux进程间通信(IPC)
  2. 英菲克无线鼠标pm6的配对方法
  3. React 生成二维码
  4. Python干旱指数库climate_indices学习
  5. ugui 转轮_(转)unity3D的FingerGestures插件
  6. Python爬虫入门第一课:如何解析网页
  7. matplotlib画会动的椭圆
  8. 模块化笔记软件综合评测:Craft、Notion、FlowUs
  9. Flink 1.10 SQL、HiveCatalog与事件时间整合示例
  10. 手游冷知识丨为什么绝大多数手游不开放自由交易系统?