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://xiahunao.cn/news/2905563.html

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

相关文章

高效批量管理文件,轻松实现文件批量复制并覆盖相同文件名,轻松管理文件

亲爱的用户们,您是否在批量复制文件时常常被相同文件名困扰,手动一个个改名繁琐又费时?现在,我们为您推出一款智能的文件批量改名工具,帮助您轻松处理复制时的相同文件名,让文件管理更从容! 首…

row_number 函数和关联更新

生成测试数据,房间号数据如下: CREATE TABLE hotel (floor_nbr,room_nbr) ASSELECT 1,100 FROM DUAL UNION ALLSELECT 1,100 FROM DUAL UNION ALLSELECT 2,100 FROM DUAL UNION ALLSELECT 2,100 FROM DUAL UNION ALLSELECT 3,100 FROM DUAL; 里面的房间号…

智慧公厕解决方案打造更加智能的卫生空间

一、智慧公厕方案概述 智慧公厕方案旨在解决现有公厕存在的诸多问题,包括民众用厕困难、环境卫生状况不佳、管理效率低下等方面。针对民众的需求和管理方面的挑战,智慧公厕提供了一套综合解决方案,包括智能导航、环境监测、资源管理等功能&a…

echarts使用基础

1,下载并引入echarts.js文件 2,准备一个具备大小(有宽和高)DOM容器 3,初始化echarts实例对象 4,指定配置项和相关数据(option) 5,将配置项设置给echarts实例对象 下载入口: 官…

大模型重塑电商,淘宝、百度、京东讲出新故事

配图来自Canva可画 随着AI技术日渐成熟,大模型在各个领域的应用也越来越深入,国内互联网行业也随之进入了大模型竞赛的后半场,开始从“百模大战”转向了实际应用。大模型从通用到细分垂直领域的跨越,也让更多行业迎来了新的商机。…

python数据实时传给unity工程并绘制出来

python # 服务器端代码 import socket import random import struct import time# 创建一个服务器Socket server_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 监听的地址和端口 host 127.0.0.1 port 12345# 绑定地址和端口 server_socket.bind((host, port…

【机器学习】深入探讨基于实例的学习及K-最近邻算法

深入探讨基于实例的学习及K-最近邻算法 在机器学习的众多策略中,基于实例的学习方法因其简单性和高效性而备受关注。这种方法的核心理念在于利用已知的数据实例来预测新数据的标签或属性。本文将深入探讨其中的两个重要概念:最近邻算法和K-最近邻算法&a…

免费设计原型图必备!这9款工具值得一试!

在当今快速发展的数字世界中,原型图设计工具无疑是设计师必不可少的武器。高效易用的工具不仅能使设计过程更加顺畅,还能有效提高设计质量。在这个竞争激烈的市场上,有许多优秀的免费原型图设计工具可供选择。以下是我们选择的9种免费原型图设…

STM32/GD32的以太网DMA描述符

继续梳理以太网的DMA描述符。 以太网DAM描述符的结构 有两种结构,链式结构和环形结构。 常用的是链式结构。 标准库中,关于DMA描述符的数据结构 以gd32f4xx_enet.c为例。 先说发送描述符。 系统分配了5个发送描述符。每个描述符对应的缓冲区大小为152…

C++ 多线程和互斥锁(一文搞定)

实验 简介&#xff1a;我们启动并行启动两个线程&#xff0c;但设置一个全局互斥锁&#xff0c;在两个线程中等待并占用互斥锁&#xff0c;然后输出日志。 代码 #include <iostream> #include <thread> /* C 多线程库 */ #include <mutex> …

Blenderproc渲染6D位姿估计数据集

https://github.com/DLR-RM/BlenderProc/tree/main/examples/datasets/bop_challenge 目录 1.3d渲染原理 2.步骤 3.代码 生成mask_all 4.难例渲染 物体高反光​编辑​编辑强弱灯光(明暗)​编辑​编辑​编辑物体xyz范围缩小 物体重复 干扰物&#xff08;自定义干扰物遮…

DP1363F高度集成的非接触读写芯片 13.56M NFC/RFID

DP1363F高度集成的非接触读写芯片 13.56M NFC/RFID读卡器芯片 兼容替代CLRC663 DP1363F是一款高度集成的非接触读写芯片&#xff0c;集强大的多协议支持、最高射频输出功率&#xff0c;以及突破性技术低功耗卡片检测等优势于一身&#xff0c;满足市场对更高集成度、更小外壳和互…

Coursera自然语言处理专项课程03:Natural Language Processing with Sequence Models笔记 Week01

Natural Language Processing with Sequence Models Course Certificate 本文是https://www.coursera.org/learn/sequence-models-in-nlp 这门课程的学习笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 Natural Language Processing with Sequence ModelsWeek 01…

docker:在ubuntu中运行docker容器

前言 1 本笔记本电脑运行的ubuntu20.04系统 2 docker运行在ubuntu20.04系统 3 docker镜像使用的是ubuntu18.04&#xff0c;这样拉的 docker pull ubuntu:18.04 4 docker容器中运行的是ubuntu18.04的系统&#xff0c;嗯就是严谨 5 这纯粹是学习笔记&#xff0c;实际上没啥价值。…

经纬恒润AUTOSAR产品成功适配芯来RISC-V车规内核

近日&#xff0c;经纬恒润AUTOSAR基础软件产品INTEWORK-EAS&#xff08;ECU AUTOSAR Software&#xff0c;以下简称EAS&#xff09;在芯来提供的HP060开发板上成功适配芯来科技的RISC-V处理器NA内核&#xff0c;双方携手打造了具备灵活、可靠、高性能、强安全性的解决方案。这极…

【分布式】——CAPBASE理论

CAP&BASE理论 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/tree-learning-notes ⭐⭐⭐⭐⭐⭐ Spring专栏&#x1f449;https://blog.csdn.net/weixin_53580595/category_12279588.html Sprin…

STM32使用USART发送数据包指令点亮板载LED灯

电路连接&#xff1a; 连接显示屏模块&#xff0c;显示屏的SCL在B10&#xff0c;SDA在B11。 程序目的&#xff1a; 发送LED_ON指令打开板载LED灯&#xff0c;发送LED_OFF关闭板载LED灯&#xff0c;与上一个博客不同&#xff0c;这个实际上是实现串口收发文本数据包。 …

ES学习日记(一)-------单节点安装启动

基于ES7.4.1编写,其实一开始用的最新的8.1,但是问题太多了!!!!不稳定,降到7.4 下载好的安装包上传到服务器或虚拟机,创建ES目录,命令mkdir -p /路径xxxx 复制安装包到指定路径并解压: tar zxvf elasticsearch-8.1.0-linux-x86_64.tar.gz -C /usr/local/es/ 进入bin目录安装,命…

边缘计算盒子 | 什么是边缘计算盒子?选型要看哪些参数?

边缘计算(Edge Computing)是一种分布式计算范式&#xff0c;它将计算资源和数据存储位于离网络核心节点较近的地方&#xff0c;以降低延迟、提高传输速度和数据安全性。通常可以把边缘计算盒子(Edge Computing Box)理解成一种集成了边缘计算功能的硬件设备&#xff0c;通常部署…

揭秘’在家答答题,无需经验、无论男女、单号轻松日产200+的一个玩法

项目简介 公众号&#xff1a;老A程序站 这个项目是人人可参与的&#xff0c;无需支付任何费用&#xff0c;只需投入时间即可。每天的任务主要是回答问题。 项目 地 址 &#xff1a; laoa1.cn/1457.html 如果遇到不会的问题&#xff0c;可以直接使用百度进行搜索。我们通过…