身份证号第18位(效验码)计算方法 用于检测身份证号是否正确
来源:互联网 发布:图形工作站 知乎 编辑:程序博客网 时间:2024/05/18 02:30
前言:
由于在某些时候,可能需要用户输入真实的身份证号,但是用户可能会胡乱输入虚假的身份证号,导致信息的不真实性,所以为了防止用户胡乱输入,可以通过一些小方法来检测身份证号是否输入正确,本文将介绍一种方法——检测效验码,来检测身份证号码的准确性。
方法:
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;}}}};当然,该检测方法,只能降低用户提供虚假的信息可能性,但不能完全确保用户提供的身份信息不是虚假的。
阅读全文
0 0
- 身份证号第18位(效验码)计算方法 用于检测身份证号是否正确
- 身份证号检测是否正确(实战)
- 验证身份证号是否正确
- 校验18位身份证号是否是有效的身份证号
- js判断身份证号是否正确
- android 判断身份证号是否正确
- java判断身份证号是否正确
- 身份证号第18位的计算
- 份证号是否已注册,身份证号是否正确
- 验证身份证号是否正确的代码
- oracle 函数 验证身份证号是否正确
- oracle 检验身份证号是否正确存储过程
- PHP 验证身份证号是否正确的函数
- C# 小程序之新手练习(五)15位身份证号转18位身份证号
- 汇总15位身份证号和18位身份证号的区别
- 15位身份证号转换为18位身份证号
- 身份证号15->18位
- 身份证号
- ctags,cscope,nerdtree,tmux 笔记
- Apple
- sessionStorage、localStorage和cookie
- win10一键重装系统软件哪个好呢?
- netty实战-netty client连接池设计
- 身份证号第18位(效验码)计算方法 用于检测身份证号是否正确
- 自定义标签fn
- Python实现文件md5校验
- cocos开发环境搭建
- 网络编程与并发-TCP/UDP套接字、粘包问题、Socket编程、并发编程、FTP作业
- HDU 6206 Apple 2017ICPC青岛网赛 A (高精度+大数模版)
- hdu6214 Smallest Minimum Cut(最小割求割边数)
- 有23枚硬币在桌上,10枚正面朝上 ...
- Linux命令行——cat命令详解