7-10 查验身份证

news2024/12/24 8:16:12

 

分数 15

全屏浏览题目

切换布局

作者 陈越

单位 浙江大学

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

鸣谢阜阳师范学院范建中老师补充数据

鸣谢浙江工业大学之江学院石洗凡老师纠正数据

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

我的答案:

这道题目要求验证身份证的最后一位校验码是否正确。给出了前17位数字的加权求和的权重和根据求和结果得到校验码的规则。

解题步骤:

  1. 初始化:先定义权重数组weights[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2}和校验码数组check[11] = {'1','0','X','9','8','7','6','5','4','3','2'}

  2. 输入处理:读入NN个身份证号。

  3. 校验码验证:对于每一个身份证号:

    a. 检查前17位是否都是数字。如果不是,直接输出这个身份证号。

    b. 如果前17位都是数字,使用权重数组对其进行加权求和。

    c. 将加权求和的结果对11取模得到索引值Z

    d. 使用Z从校验码数组中获取对应的校验码,并与身份证号的最后一位进行比较。如果不相同,输出这个身份证号。

  4. 输出结果:如果所有身份证号都验证通过,则输出All passed

C语言:

#include <stdio.h>
#include <stdbool.h>

int main() {
    int weights[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    char check[11] = {'1','0','X','9','8','7','6','5','4','3','2'};
    int N;
    scanf("%d", &N);
    bool allPassed = true;

    for (int i = 0; i < N; i++) {
        char ID[19];
        scanf("%s", ID);
        int sum = 0;
        bool isValid = true;
        for (int j = 0; j < 17; j++) {
            if (ID[j] < '0' || ID[j] > '9') {
                isValid = false;
                break;
            }
            sum += (ID[j] - '0') * weights[j];
        }

        if (!isValid || check[sum % 11] != ID[17]) {
            printf("%s\n", ID);
            allPassed = false;
        }
    }

    if (allPassed) {
        printf("All passed\n");
    }
    return 0;
}

C++:
 

#include <iostream>
#include <string>
using namespace std;

int main() {
    int weights[17] = {7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
    char check[11] = {'1','0','X','9','8','7','6','5','4','3','2'};
    int N;
    cin >> N;
    bool allPassed = true;

    for (int i = 0; i < N; i++) {
        string ID;
        cin >> ID;
        int sum = 0;
        bool isValid = true;
        for (int j = 0; j < 17; j++) {
            if (ID[j] < '0' || ID[j] > '9') {
                isValid = false;
                break;
            }
            sum += (ID[j] - '0') * weights[j];
        }

        if (!isValid || check[sum % 11] != ID[17]) {
            cout << ID << endl;
            allPassed = false;
        }
    }

    if (allPassed) {
        cout << "All passed" << endl;
    }
    return 0;
}

总结:

从这道题目中,我们能够学习到以下几点:

1. **实际应用的算法**:身份证的校验码是为了确保身份证号码的准确性和有效性。这种校验方法在实际生活中是非常常见的,例如银行卡的Luhn算法。学习如何实现和验证这种算法有助于我们理解和处理现实生活中的类似问题。

2. **字符串处理**:题目涉及到了字符串的基础操作,例如遍历字符串、字符与数字的转换等。这增强了我们处理字符串数据的能力。

3. **数组的应用**:题目中使用了权重数组和校验码数组,通过数组可以方便地处理数据和实现查找功能。这强调了数组在数据处理中的重要性。

4. **逻辑判断的重要性**:在处理每一个身份证号之前,都需要先判断其前17位是否都是数字,再进行后续的校验操作。正确的逻辑判断可以避免不必要的计算,提高代码效率。

5. **细节处理**:题目中对于所有合法的身份证号,需要输出"All passed"。这要求我们在实现过程中对每个细节都进行仔细的处理,确保不遗漏任何情况。

6. **实际生活与编程的结合**:此题目是一个很好的例子,展示了如何将实际生活中的问题转化为一个编程问题,并使用编程方法来解决。

总的来说,这道题目不仅加强了我们的编程能力,还提高了我们处理实际问题的能力。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/909955.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

No mapping found for HTTP request with URI

参考: 参考地址 说明 ssm老项目,接过来别人的项目 临时建了一个Controller方便测试用的,结果访问掉不通,报: No mapping found for HTTP request with URIxxxx 这样的错误 解决办法 看了下web,xml配置 在 webmvc-config.xml 配置文件里面添加了几行配置 说明: com.iph.h…

如何使用 JavaScript Promise – 回调、异步等待和 Promise 方法解释

在本教程中,您将学习有关在 JavaScript 中使用 Promise 和 async/await 所需了解的所有内容。 那么让我们开始吧。 为什么在 JavaScript 中使用 Promise? ES6 引入了 Promise 作为原生实现。在 ES6 之前,我们使用回调来处理异步操作。 让我们了解什么是回调以及 Promise…

8.部署项目

项目地址&#xff1a;RuoYi-Cloud-Plus: 项目正式入驻 dromara 开源社区 迁移地址: https://gitee.com/dromara/RuoYi-Cloud-Plus 1.获取源码 需要有gitee账户 先把源码fork到自己的仓库中 需要多等待一段时间 勾选对应的环境 构建项目 2.sql导入 将sql导入到与sql文件名…

PHP 房产网站系统Dreamweaver开发mysql数据库web结构php编程计算机网页项目

一、源码特点 PHP 房产网站系统是一套完善的WEB设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 源码 https://download.csdn.net/download/qq_41221322/88233553 论文 https://download…

深入理解Java线程

进程、线程和协程 进程 程序由指令和数据组成&#xff0c;但程序要运行就要将指令加载进CPU以及数据加载进内存&#xff0c;并且在指令运行过程中可能还会用到磁盘、网络等设备。进程就是用来加载指令、管理内存和IO的。当一个程序被运行&#xff0c;从磁盘加载这个程序的代码…

基本定时器

1.简介 1. 基本定时器 TIM6 和 TIM7 包含一个 16 位自动重载计数器 2. 可以专门用于驱动数模转换器 (DAC), 用于触发 DAC 的同步电路 3. 16 位自动重载递增计数器 4. 16 位可编程预分频器 5. 计数器溢出时, 会触发中断/DMA请求 从上往下看 1.开始RCC供给定时器的时钟 RCC_APB1…

python解析小说

前言 在信息爆炸的时代&#xff0c;网络上充斥着大量的小说资源&#xff0c;让人们能够随时随地尽享阅读的乐趣。然而&#xff0c;有些小说网站要求用户付费才能获取完整的内容&#xff0c;这给许多人带来了困扰&#xff0c;尤其是像我这类对金钱概念模糊的人。不过&#xff0…

Android 12 源码分析 —— 应用层 二(SystemUI大体组织和启动过程)

Android 12 源码分析 —— 应用层 二&#xff08;SystemUI大体组织和启动过程&#xff09; 在前一篇文章中&#xff0c;我们介绍了SystemUI怎么使用IDE进行编辑和调试。这是分析SystemUI的最基础&#xff0c;希望读者能尽量掌握。 本篇文章&#xff0c;将会介绍SystemUI的大概…

工业类LMQ61460AASRJRR,汽车类LMQ61460AFSQRJRRQ1、LMQ61460AASQRJRRQ1 6A、降压转换器简化原理图

一、LMQ61460AASRJRR器件概述&#xff1a; LMQ61460 是一款具有集成旁路电容器的高性能直流/直流同步降压转换器。该器件具有集成式高侧和低侧MOSFET&#xff0c;能够在 3.0V 至 36V 的宽输入电压范围内提供高达 6A 的输出电流&#xff1b;可耐受 42V 电压&#xff0c;简化了输…

智影 R100:首款三维Mesh建模的SLAM激光扫描仪

近年来&#xff0c;激光SLAM系统凭借其更加快速且准确获取更丰富信息的优势&#xff0c;迅速风靡测绘领域&#xff0c;让原本耗时耗力的外业测量变得更加高效。手持激光扫描仪作为基于激光SLAM技术衍生的众多产品之一&#xff0c;相较于架站式激光扫描仪更加轻巧便利&#xff0…

AUTOSAR规范与ECU软件开发(实践篇)5.2 ETAS ISOLAR-A工具入门

目录 1、 ISOLAR-A安装方法 2 、ISOLAR-A界面说明 1、 ISOLAR-A安装方法 ISOLAR-A工具安装方法较为便捷, 按照安装提示默认操作即可。双击打开ETAS ISOLAR-A的安装包文件夹, 双击运行Autostart.exe, 会出现如图5.2所示的安装界面, 然后点击Main, 会弹出如图5.3所示界面,…

Stable Diffusion web UI 部署详细教程

前言 本文使用 AutoDL 平台进行 Stable Diffusion web UI 云端部署 AutoDL 官网&#xff1a;AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL Stable Diffusion web UI 官网&#xff1a;AUTOMATIC1111/stable-diffusion-webui: Stable Diffusion web UI (github.com) 步…

string(模拟实现与深拷贝)

目录 深拷贝与浅拷贝 浅拷贝&#xff1a; 深拷贝 写时拷贝(了解) 模拟实现 准备 完整代码 深拷贝与浅拷贝 浅拷贝&#xff1a; 也称位拷贝&#xff0c;编译器只是将对象中的值拷贝过来。如果对象中管理资源&#xff0c;最后就会导致多个对象共享同一份资源&#xff0c;当一…

AMSET计算极化声子频率

前面已有文章介绍过amset这个软件&#xff0c;包括形变势VASPAMSET计算形变势、迁移率散射AMSET计算不同散射机制下载流子迁移率的计算和绘制功能中能带结构VASPAMSET plot 绘制能带图的使用。 同时&#xff0c;通过amset可以处理密度泛函微扰计算&#xff08;DFPT&#xff09;…

软件产品鉴定测试需要哪些材料?选择第三方软件检测机构的必要性

在当今数字化时代&#xff0c;软件产品无论是在企业还是个人生活中都扮演着重要的角色。然而&#xff0c;随着软件产品的不断增多和市场竞争的加剧&#xff0c;软件产品进行鉴定测试显得尤为重要。 一、软件鉴定测试需要提供哪些材料? 1、软件产品的版本号和更新说明 2、软…

2023国赛数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…

docker容器的基础操作

一、安装docker服务&#xff0c;配置镜像加速器 1.安装必要的一些系统工具 2.添加软件源信息 3.更新源并安装 Docker-ce 4.安装校验 [rootnode ~]# docker version 5.docker镜像加速 可以在阿里云的容器镜像服务中查看配置镜像加速器 二、下载系统镜像&#xff08;Ubuntu、 …

AUTOSAR规范与ECU软件开发(实践篇)5.1 ETAS ISOLAR-A工具简介

前言 如前所述, 开发者可以先在系统级设计工具ISOLAR-A中设计软件组件框架, 包括端口接口、 端口等, 即创建各软件组件arxml描述性文件; 再将这些软件组件描述性文件导入到行为建模工具, 如Matlab/Simulink中完成内部行为建模。 亦可以先在行为建模工具中完成逻辑建模, 再…

【ES6】—数组的扩展

一、类数组/ 伪数组 1. 类/伪数组: 并不是真正意义的数组&#xff0c;有长度的属性&#xff0c;但无法使用Array原型上的方法 let divs document.getElementsByTagName(div) console.log(divs) // HTMLCollection []let divs2 document.getElementsByClassName("xxx&q…

C++ malloc/free/new/delete详解(内存管理)

C malloc/free/new/delete详解&#xff08;内存管理&#xff09; malloc/free典型用法内存分配实现过程brk和mmap申请小于128k的内存申请大于128k的内存释放内存brk和mmap的区别 new/delete典型用法 内存分配实现过程new/delete和malloc/free的区别malloc对于给每个进程分配的内…