wordpress站内全文检索,o2o网站建设机构,ppt模板 网站开发,照片编辑软件app题目描述
第二届河南省最美教师评选开始了#xff0c;每一位同学都可以投票选出你支持的人选#xff0c;但是为了防止刷票#xff0c;必须通过身份验证才可投票。负责投票平台后台的老大爷希望你能帮他验证身份证号的合法性#xff0c;防止那些熊孩子随意刷票#xff0c;…题目描述
第二届河南省最美教师评选开始了每一位同学都可以投票选出你支持的人选但是为了防止刷票必须通过身份验证才可投票。负责投票平台后台的老大爷希望你能帮他验证身份证号的合法性防止那些熊孩子随意刷票下面给出验证规则 (身份证末尾的大写X表示罗马数字10) 采用了ISO 7064:1983.MOD 11-2校验码以防止不小心记错某一位 1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为7910584216379105842。 2、将这17位数字和系数相乘的结果相加。 3、用加出来和除以11。 4、余数只可能有012345678910这11个数字。其分别对应的最后一位身份证的号码为10X 98765432。 5、通过上面得知如果余数是3就会在身份证的第18位数字上出现的是9。如果对应的数字是2身份证的最后一位号码就是X。
特别注意 ”Ⅹ“ 是 罗马数字 10 不是 英文大写字母 ”X“ 此处为了编码方便使用了英文字母 ‘X’ 代替
现在将给你提供一组身份证号码请判断哪些是合法的哪些是不合法的。 输入格式 第一行一个整数n表示给你提供的身份证号码总数 接下来n行每行18个字符为一个身份证序列保证字符满足为0~9和X(末尾的X一定为大写) (不保证省份证真实存在不保证年月日满足要求但是只需要判断身份证是否合法不需要判断年份月份是否现实) 输出格式 对于每一行输入给出一个输出表示输入的身份证是否合法 如果合法则输出True否则输出False
样例
样例输入 1 53010219200508011X
样例输出 True
数据范围与提示
数据范围 n 500
样例解释
首先我们得出前17位的乘积和 ( (57)(39)(010)(15)(08)(24)(12)(91)(26)(03)(07)(59)(010)(85)(08)(14)(1*2) )是189 然后用189除余11得出结果189%11 2也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是X。 所以可以判定这是一个正确的身份证号码。
题解
#includebits/stdc.h
using namespace std;
long long n,s,b[100]{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
string a;
char c[100]{1,0,X,9,8,7,6,5,4,3,2},e;
int main()
{cinn;while(n--){s0;cina;// 将前面的身份证号码17位数分别乘以不同的系数for(int i0;i17;i){s(a[i]-0)*b[i];}s%11;ec[s];// 判断身份证最后一位是否与计算得到的校验码相同if(a[17]e)coutTrue;elsecoutFalse;coutendl;}return 0;
}该程序使用一个整型数组 b 存储了身份证号码每一位的系数即 7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2。 然后通过循环将每一位身份证号码与对应的系数相乘并累加到变量 s 上。 计算完后将 s 取模 11得到一个余数 s 余数范围为 0~10。 然后通过余数 s 在字符数组 c 中找到对应的校验码 e。 最后判断输入的身份证最后一位是否与计算得到的校验码 e 相同如果相同输出 “True”不相同输出 “False”。 程序中的 n 表示身份证号码的总数。 注意在题目描述中将罗马数字 10 用大写字母 X 表示但在程序中使用的是英文字母 ‘X’。
点个赞吧帅哥美女们本人为小学生。