C# 实现18位身份证校验算法详解
需积分: 9 141 浏览量
更新于2024-09-11
1
收藏 35KB DOC 举报
本文介绍了一个C#实现的18位身份证格式验证算法,根据GB11643-1999《公民身份号码》标准,详细解释了身份证号码的结构和验证规则,并提供了相应的C#代码实现。
身份证号码结构详解:
1. 地址码:代表编码对象常住户口所在县(市、旗、区)的行政区划代码,遵循GB/T2260标准,由6位数字组成。
2. 出生日期码:表示编码对象的出生年、月、日,遵循GB/T7408标准,用8位数字表示,不包含分隔符。
3. 顺序码:在同一地址码标识的区域内,对同年同月同日出生的人进行编号,奇数分配给男性,偶数分配给女性,共3位数字。
4. 校验码:用于验证身份证号码的正确性,通过特定的加权求和公式和模运算计算得出,可为10个数字或字母X中的一种。
身份证号码验证算法:
1. 加权求和:将身份证号码前17位数字分别乘以对应的加权因子(Wi),然后求和。
2. 模运算:对求和结果取模11,得到余数Y。
3. 对应校验码:根据余数Y,从预设的校验码序列中找到对应值,即为18位身份证号码的最后一位。
C#代码实现身份证验证:
```csharp
private string CheckCidInfo(string cid)
{
// 加权因子数组
int[] weights = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
// 校验码对应表
char[] checkDigits = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
int sum = 0;
for (int i = 0; i < 17; i++)
{
int digit = cid[i] - '0';
if (digit >= 0 && digit <= 9)
sum += weights[i] * digit;
}
int modulus = sum % 11;
char checkChar = checkDigits[modulus];
// 如果最后一个字符与计算出的校验码匹配,则身份证有效
if (cid[17] == checkChar || (cid[17] == 'X' && checkChar == 'X'))
return "身份证号码有效";
else
return "身份证号码无效";
}
```
这段代码首先定义了加权因子和校验码对应表,然后遍历身份证号码前17位,逐位乘以对应权重并累加,接着计算模11的余数,最后比较计算出的校验码与身份证号码的最后一位是否一致,从而判断身份证号码的合法性。
综上,该算法和代码能够有效地检查输入的18位身份证号码是否符合国家标准,适用于各种需要验证身份证号码有效性的C#程序中。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2007-11-21 上传
2022-03-15 上传
点击了解资源详情
点击了解资源详情
2024-10-26 上传
ksxiaojia
- 粉丝: 1
- 资源: 3
最新资源
- 2018秋招java笔试题-coding-interview-chinese:Alistofinterestingrepositoriesab
- typora系统主题,使主题更多元化
- lianxiNotDelete
- brOscatLib:流行的Oscat库(www.oscat.de)的B&R自动化工作室端口
- project-pathfinder:在Unity引擎中创建的交互式寻路模拟
- lede-mir4
- ScreenShotHtml2Canvas
- 自述文件生成器
- practiceHomepage
- Portable PGP-开源
- logback-core-1.2.3-API文档-中文版.zip
- django_learn:python django学习
- BucksAmok.m5v6ucdtoj.gaOnvaR
- -it1081c-final-lab-part-2
- 易语言DOS取系统信息源码-易语言
- github-slideshow:机器人提供动力的培训资料库