口碑好网站建设电话,什么是搜索引擎优化用一句话概括,isux主题wordpress,慈溪网站建设题目链接 #xff1a;验证身份
题目要求#xff1a;
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下#xff1a;
首先对前17位数字加权求和#xff0c;权重分配为#xff1a;{7#xff0c;9#xff0c;10#xff0c;5验证身份
题目要求
一个合法的身份证号码由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
思路 1.定义一个数组存放权重定义一个数组存放验证码 2.定义一个数组存放权重和定义一个数组存放权重和取模11以后的值 3.定义一个数组存放取模以后得到的校验值 4.定义一个变量记录有问题身份证号码个数定义一个变量判断身份证号码是否正确 1.输入n的取值输入n行字符串 2.进行遍历每行字符串中的每个字符 3.将每个字符转化为数字进行权重和判断前17位是否是数字 4.进行权重和取模11得到校验值 5.记录k的值输出有问题身份证号码个数如果k值为0则输出All passed 代码
#include bits/stdc.husing namespace std;int main()
{int n;int q[20] {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; //记录权重char m[20] {1,0,X,9,8,7,6,5,4,3,2};//验证码cin n;string s[n];int sum[n] {0}; //记录权重和 int z[n]; //记录取模char jy[n]; //放校验值int k 0; //记录有问题身份证号码个数int t 0; //判断身份证号码是否正确 for(int i 0; i n; i )cin s[i];for(int i 0; i n; i ){for(int j 0; j 17; j ){sum[i] (int)(s[i][j] - 0) * q[j];if(s[i][j] 9 s[i][j] 0)t1;}z[i] sum[i] % 11;jy[i] m[z[i]];if(jy[i] ! s[i][17] || t){k ;cout s[i] endl;}}if(k 0)cout All passed endl;return 0;
}
测试结果