一、题目
![L1-016 查验身份证_第1张图片](http://img.e-com-net.com/image/info8/6e5b2d13dc204b23960ecfe654df88f8.jpg)
二、解题思路
- 遍历身份证号码前 17 位,如果是数字,则乘以权重值,否则退出循环;
- 如果前 17 位都是数字,判断最终的 z 对应的校验码 m 与给出的身份证号码最后一位是否一致;
- 如果有问题的身份证号码数量为 0 ,则输出 All passed 。
三、代码
#include
using namespace std;
int main()
{
int n,cot=0;
int quan[18]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
char m[12]={'1','0','X','9','8','7','6','5','4','3','2'};
cin>>n;
for(int i=0;i>id;
for(int j=0;j<17;j++)
{
if(id[j]>='0' && id[j]<='9')
{
z+=(int(id[j])-'0')*quan[j];
}
else
{
flag=false;
cout<
四、总结
- z =(前 17 位数字分别乘以对应的权重值)% 11 。
- 每次判断新的身份证号码之前需要将 flag 重新赋值为 true ,z 重新赋值为 0 。