C# 实现18位身份证校验算法详解
需积分: 9 118 浏览量
更新于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#程序中。
1295 浏览量
109 浏览量
点击了解资源详情
点击了解资源详情
2022-03-15 上传
228 浏览量

ksxiaojia
- 粉丝: 1
最新资源
- AD5421源代码解析及KEIL C编程实现
- 掌握Linux下iTerm2的180种颜色主题技巧
- Struts+JDBC实现增删改查功能的实战教程
- 自动化安全报告工具bountyplz:基于markdown模板的Linux开发解决方案
- 非线性系统中最大李雅普诺夫指数的wolf方法求解
- 网络语言的三大支柱:HTML、CSS与JavaScript
- Android开发新工具:Myeclipse ADT-22插件介绍
- 使用struts2框架实现用户注册与登录功能
- JSP Servlet实现数据的增删查改操作
- RASPnmr:基于开源的蛋白质NMR主链共振快速准确分配
- Jquery颜色选择器插件:轻松自定义网页颜色
- 探索Qt中的STLOBJGCode查看器
- 逻辑门限控制下的ABS算法在汽车防抱死制动系统中的应用研究
- STM32与Protues仿真实例教程:MEGA16 EEPROM项目源码分享
- 深入探索FAT32文件系统:数据结构与读操作实现
- 基于TensorFlow的机器学习车牌识别流程