A legitimate ID card number consists of 17-digit area, date number, sequence number and 1-digit check code. The calculation rules of the check codes are as follows:
Firstly, the weighted sum of the first 17 digits is allocated as {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2}; then the value Z is obtained by modularizing the calculated and 11 digits; finally, the value Z corresponds to the value of the check code M according to the following relationship:
Z: 0 1 2 3 4 5 6 7 8 9 10 M: 1 0 X 9 8 7 6 5 4 3 2
Given some ID number, please verify the validity of the check code and output the wrong number.
Input format:
The first line of input gives a positive integer N (=) which is the number of ID numbers entered. Then N lines, each line gives an 18-digit ID number.
Output format:
Output a problematic ID number per line in the order of input. It does not check whether the first 17 bits are reasonable or not. It only checks whether the first 17 bits are all numbers and the last 1 bit check code is calculated accurately. If all numbers are normal, output All passed.
Input Sample 1:
4 320124198808240056 12010X198901011234 110108196711301866 37070419881216001X
Output Sample 1:
12010X198901011234 110108196711301866 37070419881216001X
Input Sample 2:
2 320124198808240056 110108196711301862
Output Sample 2:
All passed
Thanks to Teacher Fan Jianzhong of Fuyang Normal University for Supplementary Data
Thanks to Professor Shi Xifan of Zhijiang College of Zhejiang University of Technology for correcting the data
#include<iostream> using namespace std; char vali(int z){ switch(z){ case 0:return '1'; case 1:return '0'; case 2:return 'X'; case 3:return '9'; case 4:return '8'; case 5:return '7'; case 6:return '6'; case 7:return '5'; case 8:return '4'; case 9:return '3'; case 10:return '2'; } } int main() { int weight[]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}; int T,sum; string tmp; char ch; bool isAllPass=true; cin>>T; for(int i=0;i<T;i++){ sum=0; cin>>tmp; for(int i=0;i<tmp.length()-1;i++){ sum+=((tmp[i]-'0')*weight[i]); } sum=sum%11; ch=vali(sum); if(!(ch==tmp[tmp.length()-1])){ isAllPass=false; cout<<tmp<<endl; } } if(isAllPass){ cout<<"All passed"; } system("pause"); return 0; }