玉林网站推广,今天无法登陆建设银行网站呢,啦啦啦资源视频在线看,seo网站优化方法L1-016 查验身份证 #xff08;15 分#xff09;一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下#xff1a; 首先对前17位数字加权求和#xff0c;权重分配为#xff1a;{7#xff0c;9#xff0c;10#xff0c;5#xff…L1-016 查验身份证 15 分 一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下 首先对前17位数字加权求和权重分配为{7910584216379105842}然后将计算的和对11取模得到值Z最后按照以下关系对应Z值与校验码M的值 Z0 1 2 3 4 5 6 7 8 9 10
M1 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#includeiostream
#include string
using namespace std;
bool func(string a);
int main() {int n;int count 0;cin n;for (int i 0; i n; i) {string a;cin a;if (func(a))count;}if (count 0)cout All passed;return 0;
}bool func(string s) {int sum 0;int a[18];for (int i 0; i 17; i) {if(!isdigit(s[i])) {cout s endl;return false;}a[i] s[i] - 0;}if (s[17] X)a[17] 10;elsea[17] s[17] - 0;int b[17] {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};for (int i 0; i 17; i) {sum sum a[i] * b[i];}sum sum % 11;int c[11] {1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2};if (c[sum] ! a[17]) {for (int i 0; i 17; i) {cout s[i];}if (a[17] ! 10)cout a[17] endl;else {cout X endl;}return true;}else {return false;}
} 转载于:https://www.cnblogs.com/Frances-CY-FKYM/p/10293543.html