【问题描述】

我国国标〖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>
#include<string>
#include<sstream>
using namespace std;
int main(){string str;stringstream ss;int a[18];while(cin>>str){if(str=="-1")break;for(int i=0;i<17;i++){//str的最后一位别输进去! ss.clear();ss<<str[i];ss>>a[i];}int sum=0;sum=a[0]*7+a[1]*9+a[2]*10+a[3]*5+a[4]*8+a[6]*2+a[7]+a[8]*6+a[5]*4+a[9]*3+a[10]*7+a[11]*9+a[12]*10+a[13]*5+a[14]*8+a[15]*4+a[16]*2;int res=sum%11;char ch;if(res==0)ch='1';else if(res==1)ch='0';else if(res==2)ch='X';else if(res==3)ch='9';else if(res==4)ch='8';else if(res==5)ch='7';else if(res==6)ch='6';else if(res==7)ch='5';else if(res==8)ch='4';else if(res==9)ch='3';else if(res==10)ch='2';if(ch==str[17])cout<<"1"<<endl;else  cout<<"0"<<endl;}return 0;
}

湖南大学21夏训练四18.身份证校验相关推荐

  1. 湖南大学21夏训练四12.疫情期间

    [问题描述] 正值新冠疫情期间,阿迪没法返回学校学习,他希望通过参加一些比赛来提高一下编程技能,同时做做运动.他收集了接下来的 n 天里每一天的信息,包括健身房是否开放,或者互联网上是否有程序设计竞赛 ...

  2. 湖南大学21夏训练四7.斯诺克台球

    [问题描述] 斯诺克台球是一项古老而又时尚的运动,使用长方形球桌,台面四角以及两长边中心位置各有一个球袋,使用的球分为1个白球,15个红球和6个彩球共22个球. 其中母球(白球)1只,目标球21只.目 ...

  3. 湖南大学21夏训练四20.恺撒Caesar密码

    [问题描述] Julius Caesar 生活在充满危险和阴谋的年代.为了生存,他首次发明了密码,用于军队的消息传递.假设你是Caesar 军团中的一名军官,需要把Caesar 发送的消息破译出来.并 ...

  4. 湖南大学21夏训练四6.数塔

    [问题描述] 给定一个数塔,如下图所示.在此数塔中,从顶部出发,在每一节点可以选择走左下或右下,一直走到底层.请找出一条路径,使路径上的数值和最大. [输入形式] 输入时第一行一个整数n,表示该数塔的 ...

  5. 湖南大学21夏训练四2.最简单的计算机

    [问题描述] 一个名叫是 PigHeadThree 的研究组织设计了一台实验用的计算机,命名为 PpMm.PpMm只能执行简单的六种命令 A,B,C,D,E,F:只有二个内存 M1,M2:三个寄存器 ...

  6. 湖南大学21夏训练三18.写出来吧

    [问题描述] 读入一个自然数n,计算其各位数字之和,用汉语拼音写出和的每一位数字. [输入形式] 每个测试输入包含1个测试用例,即给出自然数n的值.这里保证n小于10的100次方. [输出形式] 在一 ...

  7. 湖南大学21夏训练四3.相同生日

    [问题描述] 在一个有n个人的大班级中,存在两个人生日相同的概率非常大,现给出每个学生的学号,出生月日,试找出所有生日相同的学生. [输入形式] 第一行为整数n,表示有n个学生,n<=200.此 ...

  8. 湖南大学21夏训练四16.逆序数

    问题描述 在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数.也就是说,对于n个不同的元素,先规定各元素之间有 ...

  9. 湖南大学21夏训练四9.相等的多项式

    问题描述 小明现在在学习多项式的展开:就是把一个形如 (x+a1) (x+a2) - (x+an) 展开成如下形式: xn + b1xn-1 + b2xn-2 + - + bn-1x + bn 比如 ...

最新文章

  1. GitHub使用指南——建立仓库、建立文件夹、上传图片详细教程
  2. 【160天】尚学堂高琪Java300集视频精华笔记(129)
  3. 手撕设计模式之「简单工厂模式」(Java描述)
  4. Java初学者需掌握的4大核心基础知识
  5. 解决MAC系统升级导致COCOAPODS失效问题
  6. windows 通过批处理 修改环境变量
  7. SQL update 多表连接方法
  8. es6 Proxy.revocable()方法
  9. Android应用程序线程消息循环模型分析(5)
  10. Jmeter(二十三)稳定性测试后的波形图
  11. ubuntu搭建nfs网络文件系统
  12. pythonfind usage_Python实现简单Linux find命令
  13. mysql按逗号拼接起来_MySql逗号拼接字符串查询的两种方法
  14. AUTOCAD——设置颜色
  15. EINT DINT ERTM DRTM理解
  16. 魅族MX5 如何进入开发者模式
  17. perl各个符号代表的意思
  18. 怎么用计算机弹出光年之外,明日之后光年之外简谱代码-明日之后光年之外怎么弹-明日之后光年之外钢琴曲谱分享_牛游戏网...
  19. PL/SQL 创建定时任务
  20. 电脑最容易出现的各种故障问题,应该这样应对问题

热门文章

  1. mac版eclipse快捷键总结
  2. 虚拟机中Ubuntu的输入法问题
  3. java 获取法定节假日+周末+排除补班
  4. 解决执行go mod tidy时报错的问题:dial tcp: lookup xxx: no such host
  5. heic是什么格式?怎么转换成jpg或png?
  6. 利用python-opencv中solvepnp函数解决位姿定位定向问题。
  7. C语言 htons函数
  8. “女神”代言曙光服务器新品的背后
  9. Faster RCNN 中的RPN解析
  10. python多项式回归_Python | 多项式回归的实现