任何疑问、意见、建议请留言公众号:一航代码
题目描述:
身份证号的校验身份证号码共18位,最后一位是校验位。
A[18] : aaaaaabbbbbbbbccc d
校验的规则如下:
身份证的前十七位数字和对应的权值相乘后相加后所得的和对11取余的余数与校验位(身份证最后一位)相同则身份证合法。
前十七位的权值分别是:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
余数x和校验位y的对应规则对应如下:
x:0 1 2 3 4 5 6 7 8 9 10
y:1 0 x 9 8 7 6 5 4 3 2
输入格式:
输入身份证号码
输出格式:
如果所输入身份证号码合法,输出ID Correct,否则输出ID Wrong。
输入样例:
1222222222
11111111111111111111
341181198809150011
11010119900307387X
150102199003075131
150102200003075131
输出样例:
Wrong ID
Wrong ID
Correct ID
Correct ID
Correct ID
Wrong ID
解决方法:
(1)代码实现:
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
/*
341181198809150011
11010119900307387X
150102199003075131
1222222222
11111111111111111111
150102200003075131
Corrent ID
Corrent ID
Corrent ID
Wrong ID
Wrong ID
Wrong ID
@公众号:一航代码
*/
int main()
{
int weight[17] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
string s;
while (cin >> s)
{
if (s.size() != 18)
{
cout << "ID Wrong" << endl;
continue;
}
char y[11] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int sum = 0, x = 0;
for (int i = 0, j = 0; i < s.size(); i++,j++)
{
sum += ((s[i] - '0') * weight[i]);
}
x = sum % 11;
if (y[x] != s[s.size() - 1])
{
cout << "ID Wrong" << endl;
}
else
{
cout << "ID Corrent" << endl;
}
}
system("pause");
return 0;
}