C#实现身份证格式验证(自建异常实现提醒)

基本信息

        

中国居民身份证的格式包括18位数字,这些数字分别代表不同的信息:

第1、2位数字表示省份代码。
第3、4位数字表示城市代码。
第5、6位数字表示区县代码。
第7至14位数字表示出生年、月、日(其中7、8、9、10位是年,11、12位是月,13、14位是日)。
第15至17位数字是顺序码,用于标识同一地址辖区内同年同月同日出生的人,同时第17位兼具性别标识功能,男性为奇数,女性为偶数。
第18位数字是校验码,可以是0-9的数字,有时也用X表示。
此外,身份证的正面包含国徽、证件名称、签发机关(第一代用印章形式,第二代用文字形式)、证件的有效期限等信息。反面则包括持证人的姓名、性别、民族、出生日期、住址以及18位公民身份号码

中国居民身份证的最后一位校验码用于验证身份证号码的正确性。这个校验码是通过将身份证号码前17位数字分别乘以不同的系数,然后求和,并对11取余数得到的。具体步骤如下:

将身份证号码前17位分别乘以对应的系数。系数是一个从左到右递增的序列:7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2。
计算乘积的和。
将这个和除以11,得到余数。
根据余数通过一个查表的方式确定校验码。余数对应的校验码如下:
余数为0时,校验码为1。
余数为1时,校验码为0。
余数为2时,校验码为X。
余数为3时,校验码为9。
余数为4时,校验码为8。
余数为5时,校验码为7。
余数为6时,校验码为6。
余数为7时,校验码为5。
余数为8时,校验码为4。
余数为9时,校验码为3。
余数为10时,校验码为2。
如果计算出的校验码与身份证上的校验码相符,那么身份证号码就是有效的。如果不符合,那么身份证号码可能输入错误或者不是有效的身份证号码。

思路

1比对个数

2判断最后一个是X或x或数字

3判断前17为是不是数字

4计算并校验身份证是否有效

使用到的函数

char.IsDigit(字符)//判断字符是否为数字字符为字符则为true;

.Length      计算字符长度

Convert.ToInt32(字符串)     将数字字符转换为实际的数字

异常类源码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 号码识别
{class Yi_chang:Exception{public Yi_chang(string message) : base(message){}}public class person {public void a(string a2) {//判断个数和最后一个字符格式是否正确if (a2.Length != 18){throw new Yi_chang("个数不对");}else if (char.IsDigit(a2[17])!=true){if (a2[17] != 'X' & a2[17] != 'x'){throw new Yi_chang("最后一个字符格式错误");}}//判断前17个字符是否为数字if (char.IsDigit(a2[0]) != true) {throw new Yi_chang("第1个字符格式错误");}else if (char.IsDigit(a2[1]) != true){throw new Yi_chang("第2个字符格式错误");}else if (char.IsDigit(a2[2]) != true){throw new Yi_chang("第3个字符格式错误");}else if (char.IsDigit(a2[3]) != true){throw new Yi_chang("第4个字符格式错误");}else if (char.IsDigit(a2[4]) != true){throw new Yi_chang("第5个字符格式错误");}else if (char.IsDigit(a2[5]) != true){throw new Yi_chang("第6个字符格式错误");}else if (char.IsDigit(a2[6]) != true){throw new Yi_chang("第7个字符格式错误");}else if (char.IsDigit(a2[7]) != true){throw new Yi_chang("第8个字符格式错误");}else if (char.IsDigit(a2[8]) != true){throw new Yi_chang("第9个字符格式错误");}else if (char.IsDigit(a2[9]) != true){throw new Yi_chang("第10个字符格式错误");}else if (char.IsDigit(a2[10]) != true){throw new Yi_chang("第11个字符格式错误");}else if (char.IsDigit(a2[11]) != true){throw new Yi_chang("第12个字符格式错误");}else if (char.IsDigit(a2[12]) != true){throw new Yi_chang("第13个字符格式错误");}else if (char.IsDigit(a2[13]) != true){throw new Yi_chang("第14个字符格式错误");}else if (char.IsDigit(a2[14]) != true){throw new Yi_chang("第15个字符格式错误");}else if (char.IsDigit(a2[15]) != true){throw new Yi_chang("第16个字符格式错误");}else if (char.IsDigit(a2[16]) != true){throw new Yi_chang("第17个字符格式错误");}//根据最后一个效验码验证身份证格式int zhi = Convert.ToInt32(a2[0].ToString()) * 7 + Convert.ToInt32(a2[1].ToString()) * 9 + Convert.ToInt32(a2[2].ToString()) * 10 + Convert.ToInt32(a2[3].ToString()) * 5 +Convert.ToInt32(a2[4].ToString()) * 8 + Convert.ToInt32(a2[5].ToString()) * 4 + Convert.ToInt32(a2[6].ToString()) * 2 + Convert.ToInt32(a2[7].ToString()) * 1 +Convert.ToInt32(a2[8].ToString()) * 6 + Convert.ToInt32(a2[9].ToString()) * 3 + Convert.ToInt32(a2[10].ToString()) * 7 + Convert.ToInt32(a2[11].ToString()) * 9 +Convert.ToInt32(a2[12].ToString()) * 10 + Convert.ToInt32(a2[13].ToString()) * 5 + Convert.ToInt32(a2[14].ToString()) * 8 + Convert.ToInt32(a2[15].ToString()) * 4 +Convert.ToInt32(a2[16].ToString()) * 2;int yan = zhi % 11;switch (yan) {case 0:if (a2[17] != '1'){throw new Yi_chang("校验失败,身份证无效");}break;case 1:if (a2[17] != '0'){throw new Yi_chang("校验失败,身份证无效");}break;case 2:if (a2[17] != 'X'& a2[17]!='x'){throw new Yi_chang("校验失败,身份证无效");}break;case 3:if (a2[17] != '9'){throw new Yi_chang("校验失败,身份证无效");}break;case 4:if (a2[17] != '8'){throw new Yi_chang("校验失败,身份证无效");}break;case 5:if (a2[17] != '7'){throw new Yi_chang("校验失败,身份证无效");}break;case 6:if (a2[17] != '6'){throw new Yi_chang("校验失败,身份证无效");}break;case 7:if (a2[17] != '5'){throw new Yi_chang("校验失败,身份证无效");}break;case 8:if (a2[17] != '4'){throw new Yi_chang("校验失败,身份证无效");}break;case 9:if (a2[17] != '3'){throw new Yi_chang("校验失败,身份证无效");}break;case 10:if (a2[17] != '2'){throw new Yi_chang("校验失败,身份证无效");}break;}}}
}

 主函数源码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace 号码识别
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){//身份号码正确则显示正确,否则将提示错误person age1 = new person();try {age1.a(textBox1.Text.Trim());label1.Text = "格式正确";}catch (Yi_chang temp) {MessageBox.Show(temp.Message);//弹出错误原因}}}
}

设计窗口 

 

 

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

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

相关文章

如何使用群晖WebDAV实现固定公网地址同步Zotero文献管理器

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务。它支持多种后端 (D…

ODCC春季全会召开|忆联持续5年以领先技术为ODCC项目研究提供支持

2024开放数据中心委员会(ODCC)春季全会于3月27日-29日在江西省上饶市召开,作为长期的合作伙伴,忆联应邀参加本次会议,并在新技术与测试工作组会议上就研究课题开展了汇报与讨论。 2024开放数据中心委员会(O…

振弦采集仪在预防地质灾害监测中的作用与应用前景

振弦采集仪在预防地质灾害监测中的作用与应用前景 振弦采集仪(String Vibrating Sensor,简称SVM)是一种用于地质灾害监测的重要仪器,它通过测量地面振动信号来预测和预警地质灾害的发生。SVM的作用在于提供实时、准确的地质灾害监…

这款可以免费使用的城市内涝软件:慧天[HTWATER],你知道吗?

慧天[HTWATER]软件。慧天排水数字化分析平台针对城市排水系统基础设施数据管理的需求,以及水文、水力及水质模拟对数据的需求,实现了以数据库方式对相应数据的存储。可以对分流制排水系统及合流制排水系统进行地表水文、管网水力、水质过程的模拟计算。可…

智能设备控制概念及方式详解

设备控制 随着物联网设备的普及,如何让用户或者企业安全、灵活地控制和管理设备变得更加重要。因此,便有了设备控制、群组管理、智能场景、多控关联、定时任务等概念。本文主要讲解移动端应用涉及的物联网设备控制相关概念及方式方法。 在以往简单的应…

内存泄露排查流程

一、创建内存泄露案例 package com.mxl.controller;import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.Re…

HarmonyOS模拟器调试

1 、设置 -> 系统设置 -> 关于手机 快速点击 5 次 HarmonyOS 版本开启开发者模式。 2 、设置 -> 系统和更新 -> 开发人员选项 到开发人员选项后往下拉有 USB 调试 ,把 USB 调试开关打开。 源自:HarmonyOS HarmonyOS Next 仿小米商城App入门…

【管理咨询宝藏44】AA银行人力资源规划与发展提升分析报告

本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏44】AA银行人力资源规划与发展提升分析报告 【格式】PPT版本,可编辑 【关键词】战略规划、商业分析、管理咨询 【强烈推荐】这是一套…

vue3 渲染一个后端返回的图片字段渲染、table表格内放置图片

一、后端直接返回图片url 当图片字段接口直接返回的是图片url&#xff0c;可以直接放到img标签上 <img v-if"thumbLoader" class"r-image-loader-thumb" :src"resUrl" /> 二、当图片字段接口直接返回的是图片Id 那么就需要去拼一下图片…

中国地质大学教授用AI写论文?忘删GPT提示词引发学术界争论,AI到底是福还是祸?

中国地质大学一名教授在国外期刊公开发表的SCI论文&#xff0c;被发现有ChatGPT常见的提示词&#xff0c;引来使用AI代写论文的质疑。 这篇论文发表在英文国际学术期刊《Surfaces and interfaces》&#xff0c;影响因子在6.2以上&#xff0c;单篇发稿价格在2360美元&#xff0…

Gitlab CI---could not read username for xxx: no such device or address

0 Preface/Foreword 项目开发中&#xff0c;经常会使用第三方的算法或者功能&#xff0c;那么就需要把对应的repo以子模块的方式添加到当前repo中。 添加命令&#xff1a; git submodule add <URL> 1 问题表现 子模块添加成功&#xff0c;但是GitLab CI阶段&#xff…

QY-22 低功耗墒情监测站 无线 功耗低 远程实时查看

产品概述 低功耗墒情监测站基于传感、无线通信、处理与控制等物联网技术的开发&#xff0c;利用传感技术&#xff0c;通过传感器测量土壤墒情&#xff0c;并使用物联网进行传输。无需专门的通信线路&#xff0c;在联网的状态下&#xff0c;数据可快速、主动的上报到云平台&…

【C语言】内存函数(memcpy)的使用和模拟实现

目录 一、memcpy定义1.memcpy在**cplusplus**中的定义2.memcpy**复制内存块**3.参数a.目的地b.源c.数字 4.函数返回值5.函数头文件 二、memcpy的使用使用memcpy()函数完成拷贝整型数组数据 三、memcpy的模拟实现思路代码 一、memcpy定义 1.memcpy在cplusplus中的定义 链接: l…

太赞了!微信好友恢复用这6招就能找回来(2024最新)

想象一下这样的情景&#xff1a;您突然意识到自己不小心把某个重要的微信好友删除了&#xff0c;或者您的微信好友列表突然出现了空白&#xff0c;这可能会让人感到困扰。 因为微信是我们日常生活中最常用的即时通讯工具之一&#xff0c;我们与家人、朋友和同事之间的沟通几乎…

初识C++之命名空间(namespace)

初识C之入门 命名空间(namespace) 文章目录 初识C之入门 命名空间(namespace)1.为什么要有命名空间2. 命名空间 namespace使用方法3. 作用域限定符(::&#xff09;和 命名空间(namespace)4. 命名空间的定义5. 命名空间的嵌套6. 命名空间的使用7. 总结 1.为什么要有命名空间 在C…

Git命令上传本地项目至github

记录如何创建个人仓库并上传已有代码至github in MacOS环境 0. 首先下载git 方法很多 这里就不介绍了 1. Github Create a new repository 先在github上创建一个空仓库&#xff0c;用于一会儿链接项目文件&#xff0c;按照自己的需求设置name和是否private 2.push an exis…

N5230A安捷伦N5230A网络分析仪

181/2461/8938产品概述&#xff1a; Agilent N5230A 网络分析仪提供了速度和精度的卓越组合&#xff0c;用于测量多端口和平衡组件&#xff0c;例如高达 50 GHz 的滤波器、双工器和射频模块&#xff08;取决于选件&#xff09;。Agilent N5230A 分析仪的自动端口扩展功能可自动…

zabbix自定义监控进程、日志文件

zabbix自定义监控进程、日志文件 zabbix自定义监控进程 在客户端安装httpd服务 [rootnode1 ~]# yum -y install httpd [rootnode1 ~]# systemctl start httpd [rootnode1 ~]# ss -antl State Recv-Q Send-Q Local Address:Port Peer Address:Port Pr…

filebox在线文件管理工具V1.11.1.1查分吧修改自用版免费分享[PHP]

* 基于:https://down.chinaz.com/soft/35899.htm * 查分吧 修改自用版今日对外分享(自2016年1.10版本以来一直用他云开发:Web环境即时看效果) * 也可以用于本人很多txt/csv通用查询系统的在线管理后台管理数据 * 默认登陆账号filebox密码nidemima * 修改账号密码:21-22行;获取…

通过WSL在阿里云上部署Vue项目

参考&#xff1a; 阿里云上搭建网站-CSDN博客 云服务器重装 关闭当前运行实例 更换操作系统&#xff0c;还有其他的进入方式。 选择ubuntu系统&#xff08;和WSL使用相同的系统&#xff09;。 设置用户和密码。发送短信验证码。 新系统更新。秒速干净的新系统设置完成。 这…