zoukankan      html  css  js  c++  java
  • PAT (Basic Level) Practise:1031. 查验身份证

    【题目链接】

    一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:

    首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:

    Z:0 1 2 3 4 5 6 7 8 9 10
    M:1 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 #include <stdio.h>
     2 
     3 int check(char *id)
     4 {
     5     int i;
     6     int m[] = {1, 0, 'X'-'0', 9, 8, 7, 6, 5, 4, 3, 2};
     7     int w[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
     8     int sum;
     9 
    10     //printf("check: %s
    ", id);
    11 
    12     for(i = 0; i < 17; i++)
    13     {
    14         if(!(id[i] >= '0' && id[i] <= '9'))
    15             return 0;
    16     }
    17 
    18     for(sum = 0, i = 0; i < 17; i++)
    19     {
    20         sum += (id[i] - '0') * w[i]; 
    21     }
    22 
    23     sum %= 11;
    24     //printf("sum: %d
    ", sum);
    25 
    26     if(m[sum] + '0' == id[17])
    27         return 1;
    28 
    29     return 0;
    30 }
    31 
    32 int main(void)
    33 {
    34     int i, num, flag;
    35     char id[100][20];
    36 
    37     scanf("%d", &num);
    38     for(i = 0; i < num; i++)
    39     {
    40         scanf("%s", &id[i][0]); 
    41     }
    42 
    43     for(flag = 0, i = 0; i < num; i++)
    44     {
    45         if(check(id[i]) != 1)
    46         {
    47             flag = 1;
    48             printf("%s
    ", id[i]);
    49         }
    50     }
    51     if(flag == 0)
    52     {
    53         printf("All passed");
    54     }
    55 
    56     return 0;
    57 }
  • 相关阅读:
    js禁止鼠标右键功能
    js判断客户端是pc还是手机及获取浏览器版本
    js实现深拷贝的一些方法
    python使用requests请求的数据乱码
    PyCharm引入python需要使用的包
    几个常见用于解决nginx负载均衡的session共享问题的办法
    面试最让你手足无措的一个问题:你的系统如何支撑高并发?
    Linux/Windows 平台最容易安装 Composer教程
    Laravel一些常用命令整理
    nginx下重写隐藏index.php文件
  • 原文地址:https://www.cnblogs.com/utank/p/4754696.html
Copyright © 2011-2022 走看看