C# 实现18位身份证校验算法详解
需积分: 9 151 浏览量
更新于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#程序中。
1288 浏览量
107 浏览量
点击了解资源详情
点击了解资源详情
2022-03-15 上传
225 浏览量
![](https://profile-avatar.csdnimg.cn/b1cc4e456a1d495081de4288fe714af4_ksxiaojia.jpg!1)
ksxiaojia
- 粉丝: 1
最新资源
- GuessNumber 2.0版本新增难度选择功能
- 联想一键恢复功能详解及NOVO按键操作指南
- Laravel 8食谱食材:掌握专业级代码轻松制作
- ASP.NET网上人才招聘系统源代码及论文全面解析
- C语言实现环形缓冲区的32位调试库
- qEdit: 基于Qt和C++的开源文本编辑器
- FortiClient 6.0.10.0297 安全软件:Windows系统安装与使用
- GNU Make第三版:深入掌握项目管理与扩展功能
- JUnit4.0版本核心jar包深入解析
- 掌握CSS弹性框与网格布局的秘诀
- 实现全动态的JSON级联select下拉框
- POSIX开源软件:电子商务平台的集成解决方案
- Linux内存管理与虚拟内存管理指南
- ASP科研项目管理系统源码与论文指南
- WPF中使用VideoCaptureElement实现拍照功能教程
- 基于ThinkPHP3.2的微信问卷考试系统源码发布