【程序设计训练】4-18 身份证校验
问题描述
我国国标〖GB 11643-1999〗中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。其校验码(最后一位)计算方法和步骤为:
(1)十七位数字本体码加权求和公式
S = Sum(Ai * Wi), i = 0, … , 16 ,先对前17位数字的权求和
其中Ai:表示第i位置上的身份证号码数字值
Wi:表示第i位置上的加权因子,前17位加权因子从左到右分别为
Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
(2)计算模
Y = mod(S, 11)
(3)通过模Y查下表得到对应的校验码
Y | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
---|---|---|---|---|---|---|---|---|---|---|---|
校验码 | 1 | 0 | X | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 |
例如:某身份证前17位为11010519491231002
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
wi | 7 | 9 | 10 | 5 | 8 | 4 | 2 | 1 | 6 | 3 | 7 | 9 | 10 | 5 | 8 | 4 | 2 |
1 | 1 | 0 | 1 | 0 | 5 | 1 | 9 | 4 | 9 | 1 | 2 | 3 | 1 | 0 | 0 | 2 | |
积 | 7 | 9 | 0 | 5 | 0 | 20 | 2 | 9 | 24 | 27 | 7 | 18 | 30 | 5 | 0 | 0 | 4 |
得到和为:167;则模为y=167%11=2
查(3)得校验码为X(大写)
请按上面所述步骤编程,输入一个二代身份证号,检查该身份证是否正确。
输入形式
输入若干行,每行一个身份证号码,最后一行输入-1
输出形式
输出1代表正确,0代表错误
样例输入
120223198902021249
130132199210293822
130402198207290622
-1
样例输出
1
1
0
参考代码
#include<iostream>
using namespace std;
int main(){int w[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};char y[11]={'1','0','X','9','8','7','6','5','4','3','2'};while(1){char num[18];cin>>num[0];if(num[0]=='-')break;//判断-1int sum=0;for(int i=1;i<18;i++)cin>>num[i];for(int i=0;i<17;i++)sum+=(num[i]-48)*w[i];sum%=11;if(num[17]==y[sum])cout<<'1'<<endl;else cout<<'0'<<endl;}
}
【程序设计训练】4-18 身份证校验相关推荐
- 湖南大学21夏训练四18.身份证校验
[问题描述] 我国国标[GB 11643-1999]中规定:公民身份号码是18位特征组合码,由十七位数字本体码和一位数字校验码组成.排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字 ...
- 【SQLServer】验证身份证号第18位校验码是否合法
目录 1.业务场景 2.知识前提 3.实现方案 4.测试 5.参考链接 1.业务场景 参考国家标准GB 11643-1999,居民身份证号组成:6位数字地址码+8位数字出生日期码+3位数字顺序码+1位 ...
- Python计算身份证第18位(校验码)来判断身份证是否输入正确
Python计算身份证第18位(校验码)来判断身份证是否输入正确 前言 身份证编码规则如下:根据[中华人民共和国国家标准GB11643-1999]中有关公民身份号码的规定,公民身份号码是特征组合码,由 ...
- 中国大陆18位身份证校验算法(附JS实现)
大陆18位身份证(第二代身份证)结构:(如下图所示) 身份号码是一组具有特征组合码,由十七位数字本体码和一位校验码组成. 排列顺序从左至右依次为:六位数字地区码,八位数字生日码,三位数字顺序码和一位数 ...
- Java身份证号码严格验证(第18位校验码算法实现)
/*** 身份证号码的格式:610821-20061222-612-X 由18位数字组成:前6位为地址码,第7至14位为出生日期码,第15至17位为顺序码,* 第18位为校验码.检验码分别是0-10共 ...
- mysql身份证校验码_用sql实现18位身份证校验代码分享 身份证校验位计算
身份证校验码的计算方法 1.将前面的身份证号码17位数分别乘以不同的系数.第i位对应的数为[2^(18-i)]mod11.从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 ...
- ES01 数据类型、正则表达式、身份证校验
1 基本数据类型 参见W3C的教程即可 2 正则表达式 参考博文:点击前往 3 身份证校验 参考博文:点击前往 <div class="panel panel-primary" ...
- sql判断邮箱是否合法_分享一个oracle身份证校验函数,判断你的身份证是否合法...
概述 有个朋友说能不能用函数来实现对身份证的校验,所以这里用Oracle的函数来实现,其他数据库异曲同工.. 身份证校验函数 CREATE OR REPLACE FUNCTION Func_check ...
- 【补充一则】身份证校验的c#代码
关于身份证号码的校验,网上的各种代码实在太多了.这里我补充一则C#的代码. 在网页上,通常是一个textbox让用户输入,然后用一个正则表达式验证控件,用这样一个正则表达式:\d{17}[\d|X]| ...
最新文章
- oracle之TNS:无监听程序解决办法
- 安卓实现记住密码登陆功能
- matlab读入txt数据_教程合集 | MATLAB文件读写(以nc与txt为例)
- 《视频直播技术详解》系列之一:开篇
- 实现DDD领域驱动设计: Part 2
- 7-8 哈利·波特的考试 (25 分)(详解+思路分析)真香啊
- 用四位led数码管作显示器的篮球比赛24秒计时器求c语言代码,单片机编程控制LED七段数码管作显示的篮球赛计时计分系统...
- Java7----ForkJoin框架
- JDBC中Statement接口提供的execute、executeQuery和executeUpdate之间的区别
- AutoCAD批量提取坐标点的三种方法
- nginx代理服务器
- exlc表格怎么换行_excel表格怎么设置文字自动换行
- mysql 转大写_mysql将字符串转换为大写的方法
- cnode社区vue和react渲染
- centos7 查看multipath服务状态是start condition failed,/etc/multipath.conf was not met
- paired-end reads的拼接
- 99.扩展.霍尔三维结构方法论 vs 切克兰德方法论
- python框架之flak学习笔记
- Matlab的residuez和residue的区别,举例
- 输出指定要求的回文日期与字符串拼接