
PTA_L1-016 查验身份证 (15分)
读取输入:首先读取输入的身份证号码个数N,然后读取每个身份证号码字符串。 分割和检查:将每个身份证号码分割为前17位和校验码。检查前17位是否都是数字。 计算加权和:对前17位数字按指定权重求和。 计算校验码:根据加权和对11取模得到Z值,然后查找对应的校验码M。 校验校验码:比较计算得到的校验码和实际校验码是否一致。 输出结果:记录有问题的身份证号码,输出结果。 读取输入:使用 分割和检查:将每个身份证号码分割为前17位和校验码,检查前17位是否都是数字。 计算加权和:遍历前17位数字,使用指定的权重数组进行加权求和。 计算校验码:对加权和取模11得到Z值,查找对应的校验码M。 校验校验码:比较计算得到的校验码和实际校验码,记录有问题的身份证号码。 输出结果:输出所有有问题的身份证号码,如果没有问题则输出"All passed"。
发布日期:2021-05-14 16:34:36
浏览次数:12
分类:精选文章
本文共 1703 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要验证身份证号码的校验码有效性。校验码的计算规则是对前17位数字按特定权重求和,然后对11取模得到一个值Z,最后根据Z值确定校验码M。我们需要检查每个身份证号码的校验码是否正确。
方法思路
解决代码
#include#include #include using namespace std;int main() { int a[] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; char M[] = {'1','0','X','9','8','7','6','5','4','3','2'}; int n; string s; vector errors; cin >> n; for (int i = 0; i < n; ++i) { cin >> s; if (s.length() != 18) { errors.push_back(s); continue; } string prefix = s.substr(0, 17); char check = s[17]; bool valid = true; long long sum = 0; for (int j = 0; j < 17; ++j) { if (prefix[j] < '0' || prefix[j] > '9') { valid = false; break; } int num = prefix[j] - '0'; sum += num * a[j]; } if (!valid) { errors.push_back(s); } else { int z = sum % 11; char computed_M = M[z]; if (computed_M != check) { errors.push_back(s); } } } if (errors.empty()) { cout << "All passed" << endl; } else { for (auto& error : errors) { cout << error << endl; } } return 0;}
代码解释
cin
读取输入的身份证号码个数N和每个身份证号码字符串。发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月08日 02时19分59秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
ios 官方sample
2019-03-11
iOS 开发官方文档链接收集
2019-03-11
网易云面试(Android岗)之旅,差点被这些基础题绊了跟头。
2019-03-11
深入理解 Android 内核设计思想(一)进程间通信与同步机制
2019-03-11
一文带你详细介绍c++中的std::move函数
2019-03-11
面试官:“看你简历上写熟悉 Handler 机制,那聊聊 IdleHandler 吧?”
2019-03-11
Android音视频开发之——音频非压缩编码和压缩编码
2019-03-11
Nginx屏蔽或禁止指定来源网站访问
2019-03-11
linux学习笔记(四)基本用户管理与帮助命令
2019-03-11
数据源-生肖配对查看姻缘财富与事业
2019-03-11
数据源-十万个为什么应用程序
2019-03-11
element 侧菜单选中默认选中,及事件,分组
2019-03-11
小程序:防止父方法被子方法冒泡,使用catchtap
2019-03-11
PHP:php 上传文件大小控制配置文件中设置的
2019-03-11
TP路由地址叠加
2019-03-11
'ls' 不是内部或外部命令
2019-03-11
解决框架报错不明显:使用try和catch是关键
2019-03-11
正则验证:element添加动态正则验证
2019-03-11
vue报错 created hook错误
2019-03-11