首页 > 其他分享 >PAT Basic 1031. 查验身份证

PAT Basic 1031. 查验身份证

时间:2023-03-17 10:44:24浏览次数:36  
标签:10 PAT 号码 17 int 校验码 身份证 Basic 1031

PAT Basic 1031. 查验身份证

1. 题目描述:

一个合法的身份证号码由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

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

2. 输入格式:

输入第一行给出正整数\(N\)(\(≤100\))是输入的身份证号码的个数。随后\(N\)行,每行给出1个18位身份证号码。

3. 输出格式:

按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed

4. 输入样例:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
2
320124198808240056
110108196711301862

5. 输出样例:

12010X198901011234
110108196711301866
37070419881216001X
All passed

6. 性能要求:

Code Size Limit
16 KB
Time Limit
400 ms
Memory Limit
64 MB

思路:

除草题,这里我当时相当于定义了一个二维字符数组将所有的身份证号码都存储下来,实际上读入一个处理一个就好。

My Code:

#include <stdio.h>
#include <stdlib.h>

#define BASE 11
#define ID_STR_LEN 19

int main(void)
{
    int weight[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4 ,2}; // 17 digit weight array
    char token[] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'}; // 11 token array
    char (*pChar) [ID_STR_LEN];
    int * pInt;
    int idNum = 0, i, weightSum = 0, j;
    int illegalCount = 0;
    
    scanf("%d", &idNum);
    
    pChar = (char (*) [19])malloc(sizeof(char[ID_STR_LEN])*idNum);
    pInt = (int *)malloc(sizeof(int) * idNum);
     
    for(i=0; i<idNum; i++)
    {
        scanf("%s", pChar[i]);
        
        pInt[i] = 0; // id is legal
        weightSum = 0;
        for(j=0; j<17; j++)
        {
            if(pChar[i][j] < '0' || pChar[i][j] > '9')
            {
                pInt[i] = 1; // id is illegal
                illegalCount++;
                break;
            }
            weightSum += weight[j]*(pChar[i][j] - '0');
        }
        if(j==17 && token[(weightSum%BASE)] != pChar[i][j])
        {
            pInt[i] = 1;
            illegalCount++;
        }
    }
    
    if(!illegalCount)
        printf("All passed\n"); // All passed
    else
    {
        for(i=0; i<idNum; i++)
        {
            if(pInt[i])
            {
                printf("%s\n", pChar[i]);
            }
        }
    }
    
    free(pChar);
    free(pInt);
    return 0;
}

标签:10,PAT,号码,17,int,校验码,身份证,Basic,1031
From: https://www.cnblogs.com/tacticKing/p/17225739.html

相关文章

  • PAT 甲级 1012 The Best Rank(25)
    ToevaluatetheperformanceofourfirstyearCSmajoredstudents,weconsidertheirgradesofthreecoursesonly:C-CProgrammingLanguage,M-Mathematics......
  • PAT Basic 1030. 完美数列
    PATBasic1030.完美数列1.题目描述:给定一个正整数数列,和正整数\(p\),设这个数列中的最大值是\(M\),最小值是\(m\),如果\(M≤mp\),则称这个数列是完美数列。现在给定......
  • PAT Basic 1029. 旧键盘
    PATBasic1029.旧键盘1.题目描述:旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏......
  • vuex TypeError: Cannot read properties of undefined (reading ‘dispatch‘)
      1、入口文件main.js  2、或者版本不匹配 vue2安装3版本的vuex,默认安装的4版本给vue3用//卸载原来安装的vuexnpmuninstallvuex//安装3.6.2版本的vuexnpm......
  • 使用patch-package定制node_modules 中的依赖包
    背景:首先,需求是这样,Vue项目中使用的是iview第三方UI库,要修改组件DatePicker中默认选中的当日的日期(如下图),实现无论在哪个时区,均显示中国的日期   由于,iview提供的a......
  • singleton pattern
    C1.overviewp1.conceptproblemsPeoplecanusereflectmechanismtocreateotherinstancetoviolatesingleton.ThesafetyofthreadInstructionreordering......
  • diff 命令 , patch
    关于diff命令:      接下来看合并:    关于Patch  ......
  • 解决 The bean 'xxx', defined in class path resource [], could not be registered.
    问题:在实现短信发送拦截功能时,创建了PassportInterceptor验证码拦截器类,使用了@Conponent注解;同时创建了InterceptorConfig拦截器配置类,使用了@Conponent注解,并使用@......
  • spingboot-context-path-默认值以及配置
    springboot项目的context-path的默认值:/可以在application.yml配置文件中自行配置:SpringBoot2.0.0.RELEASE版本以及之后server:port:80servlet:context-path:......
  • 爬虫入门--xpatch
    XPath是一门在XML文档中查找信息的语言。XPath使用路径表达式在XML文档中进行导航。XPath包含一个标准函数库。XPath是XSLT中的主要元素。XPath是一个W3C......