1031 查验身份证 (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

#include<iostream>
using namespace std;
int main(){int num;//数量int weight[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};//前17位权重char z_to_m[11] = {'1','0','X','9','8','7','6','5','4','3','2'};//z到m的转换string id[101];//存放身份照bool is_ok[101]={false};//是否正确bool flag;int ok_num = 0;//正常的数量cin>>num;for(int i = 0; i < num; i++){cin>>id[i];}for(int i = 0; i < num; i++){flag = true;int weight_num = 0;for(int j=0; j < 17; j++){if(id[i][j]<=57 && id[i][j]>=48){weight_num += (int(id[i][j]) - 48) * weight[j];}else{flag = false;break;}}if(flag == false)continue;//如果前17位不全是数字,则检查下一个int z = weight_num % 11;char m = z_to_m[z];if(m == id[i][17]){is_ok[i] = true;ok_num++;}}if(num == ok_num){cout<<"All passed"<<endl;}else{for(int i = 0; i < num; i++){if(is_ok[i] == false){cout<<id[i]<<endl;}}}return 0;
}

PAT 乙级 1031 查验身份证 (15分)相关推荐

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

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

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

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

  3. 乙级--1031 查验身份证 (15分)(中等)

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

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

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

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

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

  6. 1031 查验身份证 (15 分)

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

  7. PAT乙级1031 查验身份证

    1031. 查验身份证(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 一个合法的身份证号码由17位地区. ...

  8. PAT乙级(1031 查验身份证)

    PAT乙级1031题解题: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}:然后将计算的和对11取模得到值Z:最后按照以下关系对应Z ...

  9. pat 乙级 1031 查验身份证(C++)

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

最新文章

  1. CCNA的一个综合实验(经典)
  2. 偏方使用不当担心被毁容! - 生活至上,美容至尚!
  3. CAS单点登录0-原理
  4. SpringBoot 全局异常处理
  5. python病毒usb文件自动安装_win7禁USB自动安装驱动功能避免木马病毒入侵
  6. 双城记s001_双城记! (使用数据讲故事)
  7. python web自动化测试实验报告_Python:web自动化测试
  8. 软件工程学习进度第八周暨暑期学习进度之第八周汇总
  9. Kubernetes详解(二十一)——ReplicaSet控制器实战应用
  10. Python >>> 基于UDP 协议的实时网络视频传输
  11. 虚拟机启动失败/检查打开虚拟化-解决方案小结
  12. 微信小程序视频+微信视频号视频下载教程
  13. 职场一些办公技能和技巧总结
  14. 自动建站.实现虚拟二级目录
  15. 图形界面 II: 设置库的事件处理函数 (第三章)
  16. 架构师聊的四层代理和七层代理,都在聊什么?
  17. 线段树区间、单点修改查询模板,以及自己对线段树的理解
  18. 从哪里租vps远程桌面服务器,vps远程桌面服务器出租
  19. Git下载安装(Windows版本+Linux版本)
  20. Linux勒索软件,[图]发现针对Linux服务器和代码库的勒索软件

热门文章

  1. Soot(Java静态分析框架)入门
  2. Android vivo手机接入极光推送闪退
  3. ChatGPT平替工具claude,无需梯子,保姆级安装教程
  4. I'm Groot!
  5. OPENCV手势动作识别-石头剪刀布
  6. 抖音直播怎么看回放?需要复盘哪些数据?
  7. 关于魔兽世界3.0下载了2.64G更新包后仍然提示需要下载4.6G文档的解决方法收藏
  8. OrmLite框架 —— OrmLite 入门使用(一)
  9. 彩虹六号玩家破60000
  10. iOS动画集锦(Core Animation)