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

news2024/9/20 20:44:19

基本信息

        

中国居民身份证的格式包括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.coloradmin.cn/o/1553312.html

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

相关文章

理发店在线预约小程序源码系统 带完整的安装代码包以及搭建教程

理发店作为人们日常生活中经常光顾的场所,其服务质量和预约便利性直接影响到顾客的满意度。传统的理发店预约方式往往存在效率低下、信息不透明等问题,无法满足现代消费者的需求。因此,开发一款理发店在线预约小程序源码系统,对于…

Zabbix6 - Centos7源码编译部署HA高可用集群手册

Zabbix6 - Centos7源码编译部署HA高可用集群手册 HA高可用集群 总所周知,在我们IT运维的圈圈中,HA高可用集群服务算是逼格最高的吧也是运维里保障力度最大的环境。 HA是HighlyAvailable缩写,是双机集群系统简称,提高可用性集群,是保证业务连续性的有效解决方案,一般有两个…

数据运营分析-详解

一、指标与指标体系 指标体系就是业务逻辑的框架,也是思考业务逻辑的第一步 案例: 老板,我负责的用户活跃,主要考察每天启动产品的注册用户数量,整体来看,每月活跃保持7.3%的增长,是因为渠道团队的拉新活动带来很多新增注册用户,占每月活跃用户的40%,新一年会继续沿…

苹果应用商店上架工具比较分析与推荐

摘要 移动应用app上架是开发者关注的重要环节,但常常会面临审核不通过等问题。为帮助开发者顺利完成上架工作,各种辅助工具应运而生。本文探讨移动应用app上架原理、常见辅助工具功能及其作用,最终指出合理使用工具的重要性。 引言 移动应…

CSS实现小车旅行动画实现

小车旅行动画实现 效果展示 CSS 知识点 灵活使用 background 属性下的 repeating-linear-gradient 实现路面效果灵活运用 animation 属性与 transform 实现小车和其他元素的动画效果 动画场景分析 从效果图可以看出需要实现此动画的话,需要position属性控制元素…

梵宁教育助力大学生技能学习全面探索

在数字化时代,设计、剪辑与手绘等技能已成为大学生必备的能力之一。梵宁教育,以其深厚的教育底蕴和前瞻的教育理念,为广大学子提供了一个全面学习这些技能的优质平台。本文将深入探讨梵宁教育如何助力大学生在设计、剪辑与手绘技能上的学习与…

数据中心末端配电监控产品--AMB智能母线监控/始端箱插接箱母线测温/电力智能母线/智能母线测温/母线槽测温

列头柜对比母线槽 安科瑞薛瑶瑶18701709087 ◉铺设难度大,工期长◉聚集温升,火灾隐患◉检修困难◉灵活性差 ◉列头柜占用机柜位 列头柜电缆--智能母线系统 ◉安装方便,工期短◉柜顶明装,方便检修◉散热快,温升低&…

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…

新网站收录时间是多久,新建网站多久被百度收录

对于新建的网站而言,被搜索引擎收录是非常重要的一步,它标志着网站的正式上线和对外开放。然而,新网站被搜索引擎收录需要一定的时间,而且时间长短受多种因素影响。本文将探讨新网站收录需要多长时间,以及新建网站多久…

安全测试体系

安全测试体系 安全测试体系安全测试定义安全测试与传统的区别安全测试常用方法安全测试常用方法 客户端脚本安全测试跨站脚本攻击(XSS)XSS攻击的类型XSS攻击常用的HTML标签XSS攻击步骤页面查找XSS漏洞XSS攻击防御 跨站点请求伪造(CSRF&#x…

leetcode热题100.柱状图中最大的矩形

Problem: 84. 柱状图中最大的矩形 文章目录 题目思路复杂度Code 题目 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 示例 1: 输入:hei…

2014年认证杯SPSSPRO杯数学建模B题(第二阶段)位图的处理算法全过程文档及程序

2014年认证杯SPSSPRO杯数学建模 B题 位图的处理算法 原题再现: 图形(或图像)在计算机里主要有两种存储和表示方法。矢量图是使用点、直线或多边形等基于数学方程的几何对象来描述图形,位图则使用像素来描述图像。一般来说&#…

【ripro美化】全站美化包WordPress RiPro主题二开美化版sucaihu-childV1.9(功能集成到后台)

使用介绍 1、【宝塔】删除ripro文件,上传最新ripro版本,然后上传压缩包内的ripro里面的对应文件到ripro主题对应内覆盖(找到对应路径单个文件去覆盖)。 2、然后上传ripro-chlid子主题美化包到/wp-content/themes路径下 3、注意顺…

无需麻烦:电脑如何轻松管理和同步iPhone应用

轻松实现电脑对iPhone应用管理 摘要 本文介绍了如何使用克魔助手工具实现电脑对手机应用的管理操作。通过简单的步骤,用户可以批量操作手机应用、运行应用、查看应用日志以及安装测试IPA包,提高工作效率和方便管理手机应用。 引言 在日常工作中&#…

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

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

Day46:WEB攻防-注入工具SQLMAPTamper编写指纹修改高权限操作目录架构

目录 数据猜解-库表列数据&字典 权限操作-文件&命令&交互式 提交方法-POST&HEAD&JSON 绕过模块-Tamper脚本-使用&开发 分析拓展-代理&调试&指纹&风险&等级 知识点: 1、注入工具-SQLMAP-常规猜解&字典配置 2、注入…

2024.3.28学习笔记

今日学习韩顺平java0200_韩顺平Java_对象机制练习_哔哩哔哩_bilibili 今日学习p286-p294 继承 继承可以解决代码复用,让我们的编程更加靠近人类思维,当多个类存在相同的属性和方法时,可以从这些类中抽象出父类,在父类中定义这些…

【FedCoin: A Peer-to-Peer Payment System for Federated Learning】

在这篇论文中,我们提出了FedCoin,一个基于区块链的点对点支付系统,专为联邦学习设计,以实现基于Shapley值的实际利润分配。在FedCoin系统中,区块链共识实体负责计算SV,并且新的区块是基于“Shapley证明”&a…

6.2物联网RK3399项目开发实录-驱动开发之GPIO使用(wulianjishu666)

物联网嵌入式开发源码例程: 链接:https://pan.baidu.com/s/1B3oqq5QBhN-VmTFt9CI-7A?pwd2ihg ******************************************************************************************* GPIO 使用 简介 GPIO, 全称 General-Purpose Input/…

如何购买阿里云服务器?2024年阿里云服务器购买流程分享

很多新手用户不知道阿里云服务器购买的流程,不清楚该如何选购云服务器配置才能既满足需求又不会掉“坑”里,为此笔者整理了2024年购买阿里云服务器的完整流程,分为通过云服务器ECS产品页下单购买和通过阿里云活动购买云服务器两种最常见的购买…