PAT 乙级 1031 查验身份证 (15分)
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分)相关推荐
- PAT乙级 1031 查验身份证 (15 分)
1031 查验身份证 (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 ...
- 乙级--1031 查验身份证 (15分)(中等)
题目描述:(15) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7 ...
- PAT 乙级 1031. 查验身份证(15) Java版
一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8, ...
- 【2020模拟考试T1】【PAT乙】1031 查验身份证 (15分)模拟
problem 1031 查验身份证 (15分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10, ...
- 1031 查验身份证 (15 分)
1031 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2 ...
- PAT乙级1031 查验身份证
1031. 查验身份证(15) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 一个合法的身份证号码由17位地区. ...
- 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 ...
- pat 乙级 1031 查验身份证(C++)
题目 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5 ...
最新文章
- CCNA的一个综合实验(经典)
- 偏方使用不当担心被毁容! - 生活至上,美容至尚!
- CAS单点登录0-原理
- SpringBoot 全局异常处理
- python病毒usb文件自动安装_win7禁USB自动安装驱动功能避免木马病毒入侵
- 双城记s001_双城记! (使用数据讲故事)
- python web自动化测试实验报告_Python:web自动化测试
- 软件工程学习进度第八周暨暑期学习进度之第八周汇总
- Kubernetes详解(二十一)——ReplicaSet控制器实战应用
- Python >>> 基于UDP 协议的实时网络视频传输
- 虚拟机启动失败/检查打开虚拟化-解决方案小结
- 微信小程序视频+微信视频号视频下载教程
- 职场一些办公技能和技巧总结
- 自动建站.实现虚拟二级目录
- 图形界面 II: 设置库的事件处理函数 (第三章)
- 架构师聊的四层代理和七层代理,都在聊什么?
- 线段树区间、单点修改查询模板,以及自己对线段树的理解
- 从哪里租vps远程桌面服务器,vps远程桌面服务器出租
- Git下载安装(Windows版本+Linux版本)
- Linux勒索软件,[图]发现针对Linux服务器和代码库的勒索软件