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.hqwc.cn/news/576294.html

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

相关文章

ZK友好代数哈希函数安全倡议

1. 引言 前序博客: ZKP中的哈希函数如何选择ZK-friendly 哈希函数?snark/stark-friendly hash函数Anemoi Permutation和Jive Compression模式:高效的ZK友好的哈希函数Tip5:针对Recursive STARK的哈希函数 随着Incrementally Ve…

Uibot6.0 (RPA财务机器人师资培训第5天 ) 报销汇总机器人案例实战

训练网站:泓江科技 (lessonplan.cn)https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https://laiye.lessonplan.cn/list/ec0f5080-e1de-11ee-a1d8-3f479df4d981https…

独立游戏《星尘异变》UE5 C++程序开发日志3——UEC++特供的数据类型

本篇日志将介绍FString,FText、FName的用法和相互转换,以及容器TMap,TArray的增删查改 一、字符串相关数据类型:FString、FText、FName FString是最接近std::string的类型,字符串本身可以看做一个存储char型的动态数…

「15」操作非常简单,小白也能在直播间一键添加色源

「15」色源添加指定色彩的纯色画面素材 在OBS软件里,在来源里可以增加色源,添加一个色块到您的场景中,作为一个背景色或辅助色。 图中的显示器就是加了色源的 实操步骤 第1步 添加色源 在「来源」的左下角,点「」选择「色源」&a…

快速上手Pytrch爬虫之爬取某应图片壁纸

一、前置知识 1 爬虫简介 网络爬虫(又被称作网络蜘蛛、网络机器人,在某些社区中也经常被称为网页追逐者)可以按照指定的规则(网络爬虫的算法)自动浏览或抓取网络中的信息。 1.1 Web网页存在方式 表层网页指的是不需要提交表单&…

【Leetcode每日一题】模拟 - 提莫攻击(难度⭐)(42)

1. 题目解析 题目链接:495. 提莫攻击 2.算法原理 一、分情况讨论 要计算中毒的总时长,我们需要考虑时间点之间的差值,并根据这些差值来确定中毒的实际持续时间。 情况一:差值大于等于中毒时间 假设你的角色在时间点A中毒&#…

【Python】python+requests+excel+unittest+ddt实现接口自动化实例

目录 测试需求实现思路框架代码实例1. 环境准备和配置文件2. Excel接口数据及测试结果3. API封装4. 读取Excel数据5. 测试用例6. 日志和配置文件处理7. HTMLTestRunner生成可视化的html报告8. 报告通过飞书/邮件发送报告通过飞书发送报告通过邮件发送9. 入口函数10. 飞书Webhoo…

idea开发工具DEBUG调试java8stream流

1.在使用到stream()的行打断点 2.执行请求拦截到断点,依次按图点击 3.进入stream断点分析 4.如上图点击flat mode进入完整的每一步处理过程 5.Ok,完结

c++ 有关类的静态成员详细笔记

什么是静态成员? 别名也可以叫做静态数据成员,如果一个类建立了多个对象,那么每一个对象都会有自己的数据成员。这些值呢?互不相干,很好地实现了每一个对象之间的区别也就是所谓的封装和隐藏。但在有的时候&#xff0…

一、Go开发环境搭建

文章目录 1、开发工具2、开发环境配置3、Hello World4、语法 1、开发工具 https://code.visualstudio.com/download 2、开发环境配置 类比Java的JDK,go的SDK下载:https://studygolang.com/dl 解压: 配置环境变量path,将命令&quo…

企业年报组织机构代码查询入口

全国组织机构代码由八位数字(或大写拉丁字母)本体代码和一位数字(或大写拉丁字母)校验码,共9位组成; 组织机构代码在哪里怎么查询? 1、打开「词令」小程序; 2、打开词令小程序后&am…

免费VPS/云服务器整理汇总

随着互联网的普及和云计算技术的飞速发展,越来越多的人开始尝试使用VPS(Virtual Private Server,虚拟专用服务器)或者云服务器来部署自己的在线业务。本文将对免费VPS/云服务器进行整理汇总,助力大家轻松开启云计算之旅…