C语言运用结构体 指针函数写一个简单程序 int checkID(char *ID);并做注解 (7分) 判别身份证校验位是否正确的函数。其中参数 ID 代表一个 18 位身份证号,如果校验位正确,函数返回 1,否则返回 0。

时间: 2024-03-04 08:51:14 浏览: 24
好的,我来给您讲解一下。 首先,我们需要明确一下身份证号码的校验规则。身份证号码的最后一位是校验位,是根据前面 17 位计算得出的。具体的计算方法是: 1. 将身份证号码前 17 位分别乘以对应的系数(系数从左到右依次为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2)。 2. 将上述结果相加得到一个数。 3. 用上述结果除以 11,得到的余数就是校验位对应的数字。余数为 0 则校验位为 1,余数为 1 则校验位为 0,余数为 2 则校验位为 X,余数为 3~10 则校验位为对应的数字(例如余数为 3,则校验位为 3)。 接下来,我们就可以根据上述规则来写代码了。具体的实现方式是:将身份证号码前 17 位分别存入一个结构体中的数组中,并定义一个指向该结构体的指针,然后编写一个函数 checkID,该函数接受一个 char 类型的指针作为参数,指向身份证号码的字符串,返回值为 int 类型,表示校验位是否正确。 下面是代码实现及注释: ```c #include <stdio.h> struct ID { int num[17]; // 存储身份证号码前 17 位 }; int checkID(char *ID) { int i, sum = 0, mod; // sum 存储前 17 位乘以系数后的结果之和,mod 存储 sum 对 11 取余的结果 struct ID id; // 定义一个 ID 类型的结构体 int *p = id.num; // 定义一个指向 id.num 数组的指针 // 将身份证号码前 17 位转换成数字并存储到 id.num 数组中 for (i = 0; i < 17; i++) { *(p + i) = *(ID + i) - '0'; } // 计算前 17 位乘以系数后的结果之和 for (i = 0; i < 17; i++) { sum += *(p + i) * (i % 2 == 0 ? 7 : (i % 2 == 1 ? 9 : 0)); } // 计算 sum 对 11 取余的结果 mod = sum % 11; // 判断校验位是否正确并返回相应的值 if (mod == 0 && *(ID + 17) == '1') { return 1; } else if (mod == 1 && *(ID + 17) == '0') { return 1; } else if (mod == 2 && *(ID + 17) == 'X') { return 1; } else if (mod >= 3 && mod <= 10 && *(ID + 17) == mod + '0') { return 1; } else { return 0; } } int main() { char ID[18] = "11010119900307663X"; // 测试用的身份证号码 if (checkID(ID)) { printf("校验位正确!\n"); } else { printf("校验位错误!\n"); } return 0; } ``` 希望对您有所帮助!

相关推荐

最新推荐

recommend-type

C语言 结构体和指针详解及简单示例

本文主要介绍C语言 结构体和指针,这里整理了相关资料,并附示例代码和实现结果,以便大家学习参考,希望能帮助学习C语言的朋友
recommend-type

深入分析C语言中结构体指针的定义与引用详解

本篇文章是对C语言中结构体指针的定义与引用进行了详细的分析介绍,需要的朋友参考下
recommend-type

C语言 用指针作为函数返回值详解

本文主要介绍C语言 用指针作为函数返回值,这里整理了相关资料及示例代码,帮助大家学习理解此部分知识,有需要的同学可以参考下
recommend-type

详解C语言中结构体的自引用和相互引用

主要介绍了C语言中结构体的自引用和相互引用,详细解析了结构体中指针的指向情况,需要的朋友可以参考下
recommend-type

使用pybind11封装C++结构体作为参数的函数实现步骤

主要介绍了用pybind11封装C++结构体作为参数的函数实现步骤,本文分步骤通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用Spring boot和vue写一个登录注册界面

好的,这是一个比较常见的技术问题,我可以为您提供一些参考资料和思路。首先,您可以使用Spring Boot作为后端框架来处理用户认证和注册的逻辑,比如使用Spring Security实现用户登录认证。同时,您还需要设计相应的数据模型和数据库表结构来存储用户信息。在前端方面,您可以使用Vue.js作为框架来构建登录注册页面,使用Axios来发起API请求并和后端进行交互。当然,在实现过程中,还需要考虑一些具体细节,比如数据校验、安全性和用户体验等方面。希望这些信息能够帮助到您。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。