7-5 查验身份证 (15 分)

一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入格式:

输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出格式:

按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。

输入样例1:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输出样例1:

12010X198901011234
110108196711301866
37070419881216001X

输入样例2:

2
320124198808240056
110108196711301862

输出样例2:

All passed

理解权重,每位和其相乘后相加再对11取模与校验码进行比较,注意X是char类型的。中间有一点代码写的有点繁琐了。

#include <iostream>
using namespace std;
int main()
{int n;cin>>n;int i,j;int r[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};int f=1;while (n--){int flag=1;string a;long long int sum=0,z=0;char t;cin>>a;for(i=0;i<17;i++){sum+=(a[i]-'0')*r[i];}z=sum%11;t=a[17];if(z==0&&t=='1'){flag=0;}if(z==1&&t=='0'){flag=0;}if(z==2&&t=='X')flag=0;//这点写的太麻烦了,再看看代码,,不忍直视。。。 if(z==3&&t=='9')flag=0;if(z==4&&t=='8')flag=0;if(z==5&&t=='7')flag=0;if(z==6&&t=='6')flag=0;if(z==7&&t=='5')flag=0;if(z==8&&t=='4')flag=0;if(z==9&&t=='3')flag=0;if(z==10&&t=='2')flag=0;if(flag==1){  f=0;for(i=0;i<18;i++){cout<<a[i];}cout<<endl;}}if(f)cout<<"All passed";return 0;
}

7-5 查验身份证 (15 分)相关推荐

  1. PTA第3章-2 查验身份证 (15 分)

    第3章-2 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4, ...

  2. C++学习之路 | PTA乙级—— 1031 查验身份证 (15 分)(精简)

    1031 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2 ...

  3. 7-54 查验身份证 (15 分)

    7-54 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2 ...

  4. PAT乙级 1031 查验身份证 (15 分)

    1031 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2 ...

  5. 【2020模拟考试T1】【PAT乙】1031 查验身份证 (15分)模拟

    problem 1031 查验身份证 (15分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10, ...

  6. 查验身份证(15分)

    查验身份证 (15分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3 ...

  7. L1-016 查验身份证 (15 分)[JAVA]

    L1-016 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4 ...

  8. 查验身份证 (15 分)一个合法的身份证号码

    查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6, ...

  9. PAT 乙级 1031 查验身份证 (15分)

    1031 查验身份证 (15分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2, ...

  10. L1-016 查验身份证 (15 分)

    L1-016 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4 ...

最新文章

  1. pureftpd + pureftp-user-manager 构建磁盘配额,速率限制,web管理ftpserver
  2. 利用JDK动态代理机制实现简单拦截器
  3. Oracle 11g 之自动收集统计信息
  4. leetcode 459. 重复的子字符串(Java版)
  5. 有关AutoCompleteBox组件的研究[5][Final]_集成搜索引擎搜索建议(Search Suggestion)——Silverlight学习笔记[40]...
  6. 51单片机定时器初值的计算
  7. 2018最新电大网考计算机,2018年最新电大网考计算机应用基础统考试题.doc
  8. 印尼语翻译和爪哇翻译一次争斗为自定义
  9. SQL Server 2012 下载和安装教程
  10. U8系统管理员怎么登录服务器,u8客户端如何登录服务器
  11. 阻止野猪入境 丹麦在德国边境开始建设边境围栏
  12. 【探索HTML5第二弹03】走近地图应用的世界,看我们google地图可以看些什么!
  13. app store 注册账号生成证书上传app完整的教程
  14. 出生日期算年龄html,Javascript从出生日期算起的年龄
  15. .net 6 在退出构造函数时,不可为 null 的 属性“xxx”必须包含非 null 值。
  16. SpringBoot(46) 整合ShedLock实现分布式定时任务(redis版)
  17. 汽车行业SAP性能分析解决方案
  18. 详细步骤教学:使用PHP进行网页抓取
  19. 【C语言】sizeof和strlen的区别
  20. HDU 2535 Vote

热门文章

  1. 爱慕股份5月31日登陆上交所;阿斯利康中国北部总部正式启用;中联重科塔机智能工厂全线投产 | 美通企业周刊...
  2. html文本框回车符换行符,文本域中换行符的替换示例
  3. CentOS 5.8 上安装 systemtap-2.6
  4. 【R语言】用R写for循环批量绘制生存曲线,肠子都悔青了
  5. linux下目录挂接命令是,玩转 Linux 之:磁盘分区、挂载知多少?
  6. Evita项目-1-项目介绍
  7. 软件架构-从0到1认知分布式架构(上)
  8. 《孤岛之鬼》——江户川乱步
  9. Jumia烧的钱,比大阿哥走的那晚下的雨还要汹涌
  10. redis scan 命令底层原理(为什么会重复扫描?)