PTA——查验身份证

一个合法的身份证号码由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>
#define size 21
int Weight(char num[size])
{                 int t;t=(num[0]-'0')*7+(num[1]-'0')*9+(num[2]-'0')*10+(num[3]-'0')*5+(num[4]-'0')*8+(num[5]-'0')*4+(num[6]-'0')*2+(num[7]-'0')*1+(num[8]-'0')*6+(num[9]-'0')*3+(num[10]-'0')*7+(num[11]-'0')*9+(num[12]-'0')*10+(num[13]-'0')*5+(num[14]-'0')*8+(num[15]-'0')*4+(num[16]-'0')*2;t=t%11;return t;      
}
char Check(int n)         
{char s;switch(n){case 0 :s='1';break;case 1 :s='0';break;case 2 :s='X';break;case 3 :s='9';break;case 4 :s='8';break;case 5 :s='7';break;case 6 :s='6';break;case 7 :s='5';break;case 8 :s='4';break;case 9 :s='3';break;case 10:s='2';break;}return s;
}
int main()
{int i,j,N,error=0;char date[100][size]={'\0'};scanf("%d",&N);for(i=0;i<N;i++){scanf("%s",date[i]);for(j=0;j<17;j++){if(date[i][j]<'0'||date[i][j]>'9')      {date[i][size-1]=1;                      break;}}if(date[i][17]!=Check(Weight(date[i])))     {date[i][size-1]=1;}}for(i=0;i<N;i++){if(date[i][size-1]){printf("%s\n",date[i]);error++;}}if(!error)          {printf("All passed\n");}return 0;
}

这段代码是一个C程序,它检查输入的一组日期字符串是否符合特定的格式和校验规则。下面是对代码的逐行解释:

  1. #include<stdio.h>: 引入标准输入输出库。

  2. #define size 21: 定义一个预处理器宏,将size替换为21。

  3. int Weight(char num[size]): 定义一个函数Weight,它接受一个长度为21的字符数组作为参数,并返回一个整数。这个函数计算给定字符串的“重量”(实际上是一个校验和)。

    • 函数内部,使用字符数组中的每个字符(数字字符)减去字符'0',将其转换为整数。然后,根据一个特定的算法(看起来像是某种校验和的计算),将这些整数相加。
    • 结果取模11,得到一个介于0和10之间的值。
  4. char Check(int n): 定义一个函数Check,它接受一个整数作为参数,并返回一个字符。这个函数将整数参数转换为对应的字符。

  5. int main(): 主函数开始。

  6. int i,j,N,error=0;: 声明一些整数变量。

  7. char date[100][size]={'\0'};: 声明一个二维字符数组date,用于存储日期字符串。每个字符串长度为21,并初始化为空字符。

  8. scanf("%d",&N);: 从标准输入读取一个整数,存储在变量N中,表示要检查的日期字符串的数量。

  9. for(i=0;i<N;i++): 外循环,遍历每个日期字符串。

  10. scanf("%s",date[i]);: 读取一个日期字符串,并存储在date[i]中。

  11. 内循环(由for(j=0;j<17;j++)控制)检查日期字符串中的每个字符:

    • 如果字符不是数字(即小于'0'或大于'9'),则将date[i][size-1]设置为1,表示该字符串无效。
  12. if(date[i][17]!=Check(Weight(date[i]))): 检查计算出的校验和是否与日期字符串的第18个字符匹配。如果不匹配,将date[i][size-1]设置为1,表示该字符串无效。

  13. for(i=0;i<N;i++): 再次遍历每个日期字符串。

  14. if(date[i][size-1]): 如果日期字符串的最后一个字符为1(表示无效),则输出该字符串。同时,error计数器增加。

  15. if(!error): 如果在所有日期字符串中都没有发现无效的字符串,则输出"All passed"。

  16. return 0;: 主函数返回0,表示程序正常结束。

这个程序主要的功能是检查输入的日期字符串是否符合特定的格式和校验规则。如果某个日期字符串不符合规则,程序会输出该字符串;如果所有日期字符串都符合规则,程序会输出"All passed"。

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

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

相关文章

判断一个数是NaN和Infinity的方法

1. isNaN()、 Number.isNaN()的区别 isNaN()只要不是数字都会返回true&#xff0c; Number.isNaN()只有NaN才 返回 true 所以&#xff0c;想严格检查一个值是否是 NaN&#xff0c;就选择 Number.isNaN() isNaN() isNaN() 函数会尝试将传入的值转换为数字&#xff0c;然后检查…

PCL 计算异面直线的距离

目录 一、算法原理二、代码实现三、结果展示四、相关链接本文由CSDN点云侠原创,PCL 计算异面直线的距离,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 设置直线 A B AB A

在vue3上挂载方法,以及在页面中使用setup语法糖 该怎么使用原型(公共)上的方法

//新建的项目的main.js文件是这样的 //main.js 文件 //befor import { createApp } from vue; import App from ./App.vue;const app createApp(App); app.mount(#app);以下例子用于解释在vue3.0的main.js中挂载公共的方法&#xff08;foo&#xff09; //main.js 文件 //afte…

【JVM 基础】 Java 类加载机制

JVM 基础 - Java 类加载机制 类的生命周期类的加载: 查找并加载类的二进制数据连接验证: 确保被加载的类的正确性准备: 为类的静态变量分配内存&#xff0c;并将其初始化为默认值解析: 把类中的符号引用转换为直接引用 初始化使用卸载 类加载器&#xff0c; JVM类加载机制类加载…

nuxt 不解析HTML结构bug

记录一个本人Vue3迁移Nuxt3的报错 报错信息 [Vue warn]: Failed to resolve directive: top [nitro] [unhandledRejection] TypeError: Cannot read properties of undefined (reading ‘getSSRProps’) 原因是Vue3在迁移到nuxt3的时候有一个自定义指令没有搬过来&#xff0…

flutter 打包安卓apk 常用配置

打包之前需要先不配置不然会报错 Execution failed for task ‘:app:mergeReleaseResources’. APP目录下的build.gradleaaptOptions.cruncherEnabled falseaaptOptions.useNewCruncher false如图 配置targetSdkVersion 、minSdkVersion 在android/app/src目录下的build.…

自承载 Self-Host ASP.NET Web API 1 (C#)

本教程介绍如何在控制台应用程序中托管 Web API。 ASP.NET Web API不需要 IIS。 可以在自己的主机进程中自托管 Web API。 创建控制台应用程序项目 启动 Visual Studio&#xff0c;然后从“开始”页中选择“新建项目”。 或者&#xff0c;从“ 文件 ”菜单中选择“ 新建 ”&a…

【小工具】pixi-live2d-display,直接可用的live2d的交互网页/桌面应用

效果&#xff1a; <script src"https://cubism.live2d.com/sdk-web/cubismcore/live2dcubismcore.min.js"></script> <script src"https://cdn.jsdelivr.net/gh/dylanNew/live2d/webgl/Live2D/lib/live2d.min.js"></script> <…

CCSC,一种CPU架构

core-circuit-separate-computer 核与执行电路的分离&#xff0c;最初是为了省电。 用寄存器实现这种分离。 V寄存器控制着执行电路的供电&#xff0c;V0则不供电&#xff0c;进入省电模式&#xff1b;V1则供电&#xff0c;进入工作模式。 P寄存器是parameter-register&#xf…

4.【TypeScript 教程】TypeScript BigInt

TypeScript BigInt 本节介绍的 bigint 数据类型是用来表示那些已经超出了 number 类型最大值的整数值&#xff0c;对于总是被诟病的整数溢出问题&#xff0c;使用了 bigint 后将完美解决。 1. 解释 bigint 是一种基本数据类型&#xff08;primitive data type&#xff09;。 …

算法练习:查找二维数组中的目标值

题目&#xff1a; 编写一个高效的算法来搜索矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性&#xff1a;每行的元素从左到右升序排列。每列的元素从上到下升序排列。 实现&#xff1a; 1. main方法 public static void main(String[] args) {int[][] matrix {{1…

考研自命题资料、考题如何找

这篇文章是抖音和b站上上传的同名视频的原文稿件&#xff0c;感兴趣的csdn用户可以关注我的抖音和b站账号&#xff08;GeekPower极客力量&#xff09;。同时这篇文章也为视频观众提供方便&#xff0c;可以更加冷静地分析和思考。文章同时在知乎发表。 去年我发布了一个视频&am…

qt打包完整详细过程 包你成功

找问题找了一个多小时&#xff0c;不停调试&#xff0c;还修改文件路径&#xff0c;配置路径&#xff0c;开机关机&#xff0c;最后终于做出来了&#xff0c;得出来了一个结论 我绝对是天才 首先 看这个视频 k14 打包发布_哔哩哔哩_bilibili 不出意外&#xff0c;你绝对会在…

2024.01.09.Apple_UI_BUG

我是软件行业的&#xff0c;虽然不是手机设计的&#xff0c;但是这个设计真的导致经常看信息不完整&#xff0c;要下拉的。 特别读取文本或者其他文件的时候&#xff0c;上面有个抬头就是看不到&#xff0c;烦&#xff0c;体验感很差

linux--香橙派下--自动挂载u盘

参考&#xff1a; [(182 条消息 ) Linux 基础 ] -- udev 和 rules 使用规则 BestW2Y 的博客 -CSDN 博客 linux rules (182 条消息 ) Ubuntu udev rules_zhang6318 的博客 -CSDN 博客 规则文件是 udev 里最重要的部分&#xff0c;默认是存放在 /etc/udev/rule.d/ 下。所…

一氧化碳中毒悲剧频发:探究道合顺电化学传感器促进家庭取暖安全

1月6日&#xff0c;陕西省榆林市发生了一起疑似因使用煤炭炉取暖中毒事件。通报称&#xff0c;经公安部门现场调查&#xff0c;并结合医院救治情况&#xff0c;初步判断5人属一氧化碳中毒&#xff0c;其中4人抢救无效死亡&#xff0c;令人痛心。 一般来说&#xff0c;这种在日…

74应急响应-winlinux分析后门勒索病毒攻击

#操作系统(windows,linux)应急响应&#xff1a; 1.常见危害&#xff1a;暴力破解&#xff0c;漏洞利用&#xff0c;流量攻击&#xff0c;木马控制(Webshell,PC 木马等)&#xff0c;病毒感染(挖矿&#xff0c;蠕虫&#xff0c;勒索等)。 2.常见分析&#xff1a;计算机账户&…

Flutter GetX 之 状态管理

上一篇文章为大家介绍了 GetX的 路由管理,让大家对GetX有了初步了解,今天为大家介绍一下GetX的 状态管理。 StatelessWidget 和 StatefulWidget 介绍 在介绍之前,先简单介绍一下 Flutter 页面的 StatelessWidget 和 StatefulWidget ,其实Flutter的本质是万物都是Widget,…

ELK生命周期

ELKkafka <es生命周期可视化配置界面> 一、创建索引模式 根据logstash中的日志规则 匹配对应系统日志 二、创建索引生命周期策略&#xff1a;可以控制生成索引的生命周期 共4个阶段&#xff1a;热阶段——温阶段——冷阶段——删除阶段 阶段1. hot: 索引被频繁写入和查…

PostgreSQL ZIP版安装完全手册

前言 ZIP免安装版下载地址&#xff1a;社区 DL 页面 (enterprisedb.com) 选择所需的版本下载即可。 安装 将下载的zip安装包&#xff08;我这里下载的是postgresql-15.5-1-windows-x64-binaries.zip&#xff09;解压至D盘根路径下&#xff0c;解压后路径&#xff1a;D:/pgsq…