L1-016:查验身份证

题目描述

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

分析

这道题我们对每一个身份进行两次条件判断即可,第一次判断前十七位是否全为数字,第二次判断校验码是否正确。

程序代码

#include <stdio.h>
#include <string.h>
char fun(int n);
int res[17]={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int main()
{int n,count,both=0;   // n验证次数  count 局部变量,输出错误的身份证号    both 检验是否全部正确,输出ALL passedchar result;  // 最后一位校验码scanf("%d",&n);getchar();char id[n][18];for(int i=0;i<n;i++){scanf("%s",id[i]);}//验证前17位数字for(int i=0;i<n;i++){count=0;for(int a=0;a<17;a++)//判断前十七位是否全为数字{if(id[n][a]<'0'&&id[n][a]>'9'){count++;}}if(count>0){for(int l=0;l<18;l++)printf("%c",id[i][l]);printf("\n");both++;}//进行下一步验证if(count==0){int k=0;for(int j=0;j<17;j++){k+=(id[i][j]-'0')*res[j];}k=k%11;result=fun(k);//获取校验码if(id[i][17]!=result)//当校验码不正确,输出错误的身份证号{for(int l=0;l<18;l++)printf("%c",id[i][l]);printf("\n");both++;}}}if(both==0){printf("All passed");}return 0;
}
char fun(int n)  //z值与M值对应  当然也可以一维数组,不过为了更好的匹配,于是用switch语句
{switch (n) {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';}return 0;  //不会返回这个值的
}

运行结果

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

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

相关文章

quickapp_快应用_系统接口应用

系统接口 在项目中使用到的接口都需要在配置文件manifest.json中声明&#xff0c;不然会报如下警告 [WARN] 请在 manifest.json 文件里声明项目代码中用到的接口: system.storage, service.account, system.package, system.webview[1]检查某app是否在手机上安装 官方文档&a…

前端nginx代理,访问后端接口502问题积锦

项目场景&#xff1a; 项目上线&#xff1a;前端服务器配置了nginx反向代理后&#xff0c;用户发出请求&#xff0c;结果502&#xff0c;本地请求后端服务的时候就正常 解决方案 http状态码502 目前&#xff1a; 前端服务是正常的后端服务也正常那么&#xff0c;就是连结前…

【Flink基础】-- 延迟数据的处理

目录 ​一、关于延迟的一些概念 1、什么是延迟? 2、什么导致互联网延迟?

jenkins清理僵尸任务和排队任务

步骤 进入 Manage Jenkins系统管理 然后点击 Script Console , 然后根据自己需求选择性执行后面的脚本 查看所有进程 Thread.getAllStackTraces().keySet().each() {t -> println("name:"t.getName()) }例如: name:Thread-90 name:Scheduler-174573182-1 name…

Java List、Set、Map 之间的区别是什么?

Java List、Set、Map 之间的区别是什么&#xff1f; 在Java中&#xff0c;List、Set 和 Map 是三种不同的集合接口&#xff0c;用于存储和操作不同类型的数据。 1. List 接口&#xff1a; 特点&#xff1a; 有序&#xff1a;元素的顺序与插入顺序一致。允许重复&#xff1a;…

P1 Orange Pi Zero2镜像烧录和环境搭建(换源)

目录 前言 01 镜像下载 02 镜像烧录 03 SD卡启动 04 SSH登录开发板 05 基于官方外设开发 方法1 方法2 前言 此专栏为智能家居项目&#xff0c;使用的开发板一共有三块&#xff0c;分别为 主控&#xff1a;Orange Pi Zero2触摸屏控制面板&#xff1a;i.MX 6ULL子系统&…

【华为OD题库-063】字符匹配-java

题目 给你一个字符串数组(每个字符串均由小写字母组成)和一个字符规律&#xff08;由小写字母和.和组成)&#xff0c;识别数组中哪些字符串可以匹配到字符规律上。".“匹配任意单个字符&#xff0c;”*"匹配零个或多个前面的那一个元素&#xff0c;所谓匹配&#xff…

字符指针变量数组指针变量

字符指针变量 在指针的类型中&#xff0c;我们知道有一种指针叫做字符指针 一般的使用情况如下&#xff1a; #include<stdio.h> int main() {char ch w;char* pa &ch;*pa h;printf("%c", *pa);return 0; } 还有一种使用方法如下&#xff1a; #incl…

国内 AI 成图第一案!你来你会怎么判?

我国目前并未出台专门针对网络爬虫技术的法律规范&#xff0c;但在司法实践中&#xff0c;相关判决已屡见不鲜&#xff0c;K 哥特设了“K哥爬虫普法”专栏&#xff0c;本栏目通过对真实案例的分析&#xff0c;旨在提高广大爬虫工程师的法律意识&#xff0c;知晓如何合法合规利用…

室内外融合便携式定位终端5G+UWB+RTK

一、介绍 便携式定位终端主要用于提供高精度的位置数据&#xff0c;支持室内UWB定位和室外北斗系统定位功能&#xff0c;支持5G公网和5G专网通信功能&#xff0c;便携式定位终端中超宽带(UWB)和实时动态(RTK)技术的集成代表了精确位置跟踪方面的重大进步。这款UWBRTK便携式定位…

git 本地改动无法删除

1. 问题 记录下git遇到奇怪的问题&#xff0c;本地有些改动不知道什么原因无法删除 git stash&#xff0c; git reset --hard HEAD 等都无法生效&#xff0c;最终通过强制拉取线上解决 如下图&#xff1a; 2. 解决 git fetch --all git reset --hard origin/master执行这两…

Android RatingBar实现五星好评

属性 isIndicatorRatingBar 是否为指示器&#xff0c;为true时&#xff0c;用户将无法交互操作&#xff0c;默认为false。 numStars 显示的星型数量&#xff0c;必须是一个整形值&#xff0c;像“50”&#xff0c;虽然可以设置很大&#xff0c;但一般…

Java拆分集合

在对数据进行批量操作的时候&#xff0c;由于数据量太大&#xff0c;需要对数据进行拆分操作&#xff0c;分成N个小集合。 代码如下&#xff1a; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil;import java.util.ArrayList; import java.u…

java多线程学习- 下

六. 线程管理 6.1 线程组 类似于在计算机中使用文件夹管理文件, 也可以使用线程组来管理线程,在线程组中定义一组相似(相关)的线程. 在线程组中也可以定义子线程组, Thread 类有几个构造方法允许在创建线程时指定线程组,如果创建线程时没有指定线程组则该线程就属于浮现出所在…

STM32-新建工程(标准库)

目录 STM32F10x新建工程&#xff08;标准库&#xff09; 移植文件夹 新建工程 添加启动文件和必需文件 在工程中加载新添加的文件 在工程中添加文件路径 在工程中添加main函数 添加lib库 添加必需文件 添加宏定义 STM32F10x新建工程&#xff08;标准库&#xff09; …

【Python】创建简单的Python微服务Demo与FastAPI

创建简单的Python微服务Demo与FastAPI 在微服务架构中&#xff0c;通过FastAPI框架创建一个简单的Python微服务Demo涉及多个步骤&#xff0c;包括定义服务、使用框架、进行通信等。在这篇文章中&#xff0c;我们将使用FastAPI框架创建两个简单的微服务&#xff0c;它们通过RES…

HBase安装配置:一键自动安装配置

使用shell脚本一键下载、安装、配置HBase&#xff08;单机版&#xff09; 1. 把下面的脚本复制保存为/tmp/install_hbase.sh文件 #!/bin/bash# 安装之前确保安装目录有写入权限&#xff0c;若没有&#xff0c;自行增加 # 安装版本 zk_version"2.4.8" # 安装目录 zk…

【WxPusher】消息推送小案例

提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 WxPusher后台 WxPusher文档 一、注册WxPusher 进入后台获取你的token 二、使用步骤 1.编写脚本 参数如下&#xff08;示例&#xff09;&#xff1a; {"appToken": "AT_AnXubGNGCe7OVN…

基于Java SSM企业用电管理系统

企业用电管理系统是供电部门对所辖区域的企业用电进行管理的系统&#xff0c;假设企业全部采用分时电表&#xff0c;分谷(低谷时段)、峰(高峰时段)时段分别计量。系统涉及的信息及操作有&#xff1a; 用电企业&#xff1a;用电企业编号、用电企业名、地址、电话、联系人等。 电…

基于springboot的校园二手市场

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…