校验码是识别一个身份证号码是否真实存在的重要的依据。那我们要如何通过校验码来判断一个身份证号码是否真实的呢?

校验码如何判断身份证号码真伪呢?我们来看看具体计划过程。

第一步:将身份证号码的第1位数字与7相乘;将身份证号码的第2位数字与9相乘;将身份证号码的第3位数字与10相乘;将身份证号码的第4位数字与5相乘;将身份证号码的第5位数字与8相乘;将身份证号码的第6位数字与4相乘;将身份证号码的第7位数字与2相乘;将身份证号码的第8位数字与1相乘;将身份证号码的第9位数字与6相乘;将身份证号码的第10位数字与3相乘;将身份证号码的第11位数字与7相乘;将身份证号码的第12位数字与9相乘;将身份证号码的第13位数字与10相乘;将身份证号码的第14位数字与5相乘;将身份证号码的第15位数字与8相乘;将身份证号码的第16位数字与4相乘;将身份证号码的第17位数字与2相乘。

第二步:将第一步身份证号码1~17位相乘的结果求和,全部加起来。

第三步:用第二步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,余数为9,余数为10共11种可能性。

第四步:如果余数为0,那对应的最后一位身份证的号码为1;如果余数为1,那对应的最后一位身份证的号码为0;如果余数为2,那对应的最后一位身份证的号码为X;如果余数为3,那对应的最后一位身份证的号码为9;如果余数为4,那对应的最后一位身份证的号码为8;如果余数为5,那对应的最后一位身份证的号码为7;如果余数为6,那对应的最后一位身份证的号码为6;如果余数为7,那对应的最后一位身份证的号码为5;如果余数为8,那对应的最后一位身份证的号码为4;如果余数为9,那对应的最后一位身份证的号码为3;如果余数为10,那对应的最后一位身份证的号码为2。

比如: 身份证号码 432831196411150810 这个身份证是否是有效身份证号码呢?请看校验码分析。

校验码是0,身份证号码 432831196411150810中最后一位是0,所以这是一个有效的身份证号码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace shenfenzhengCheck
{/// <summary>  /// 验证身份证号码类  /// </summary>  public class IDCardValidation{/// <summary>  /// 验证身份证合理性  /// </summary>  /// <param name="Id"></param>  /// <returns></returns>  public bool CheckIDCard(string idNumber){if (idNumber.Length == 18){bool check = CheckIDCard18(idNumber);return check;}else if (idNumber.Length == 15){bool check = CheckIDCard15(idNumber);return check;}else{return false;}}/// <summary>  /// 18位身份证号码验证  /// </summary>  private bool CheckIDCard18(string idNumber){long n = 0;if (long.TryParse(idNumber.Remove(17), out n) == false|| n < Math.Pow(10, 16) || long.TryParse(idNumber.Replace('x', '0').Replace('X', '0'), out n) == false){return false;//数字验证  }string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";if (address.IndexOf(idNumber.Remove(2)) == -1){return false;//省份验证  }string birth = idNumber.Substring(6, 8).Insert(6, "-").Insert(4, "-");DateTime time = new DateTime();if (DateTime.TryParse(birth, out time) == false){return false;//生日验证  }string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');char[] Ai = idNumber.Remove(17).ToCharArray();int sum = 0;for (int i = 0; i < 17; i++){sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());}int y = -1;Math.DivRem(sum, 11, out y);if (arrVarifyCode[y] != idNumber.Substring(17, 1).ToLower()){return false;//校验码验证  }return true;//符合GB11643-1999标准  }/// <summary>  /// 16位身份证号码验证  /// </summary>  private bool CheckIDCard15(string idNumber){long n = 0;if (long.TryParse(idNumber, out n) == false || n < Math.Pow(10, 14)){return false;//数字验证  }string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";if (address.IndexOf(idNumber.Remove(2)) == -1){return false;//省份验证  }string birth = idNumber.Substring(6, 6).Insert(4, "-").Insert(2, "-");DateTime time = new DateTime();if (DateTime.TryParse(birth, out time) == false){return false;//生日验证  }return true;}}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace shenfenzhengCheck
{class Program{static void Main(string[] args){IDCardValidation card = new IDCardValidation();//从网上身份证大全找来的,验证结果为true  bool result = card.CheckIDCard("110101199403078194");Console.WriteLine(result.ToString());//随便编的,验证结果为false  //result = card.CheckIDCard("612427199901281214");//Console.WriteLine(result.ToString());Console.ReadLine();}}
}

C#身份证号码验证代码相关推荐

  1. C#实现身份证号码验证的方法

    本文实例讲述了C#实现身份证号码验证的方法.分享给大家供大家参考.具体实现方法如下: 随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很 ...

  2. 正则实现二代身份证号码验证详解

    Start 开发过程中,常常需要对一些输入信息进行有效性验证,使用正则表达式进行校验是最简单.效率最高的方式了,下面就来看看15/18位身份证号码验证的正则表达式吧. 一: IdCodeValid:f ...

  3. java对台湾同胞身份证号码验证

    package com.yt.eos.common.enumclass;import org.apache.commons.lang3.StringUtils;/*** 台湾同胞身份证号码验证* @a ...

  4. 身份证号码验证(转)

    文章出处: http://dengo.org/archives/941 不少大的游戏注册时都要输入身份证号码,来限制未成年人,配合所谓的反沉迷系统,账号注册环节注重的是快捷,所以身份证验证都不是真实的 ...

  5. JS正则表达式-附身份证号码验证(简易版)

    文章目录 JS正则表达式 匹配与搜索 一.方括号,圆括号 二.修饰符 三.元字符 四.量词 身份证号码验证(简易版) 身份证号码规则: 1.地址码 2.年份码 3.月份码 4.日期码 5.顺序码 6. ...

  6. easyUI身份证号码验证

    easyUI身份证号码验证,留存 方便以后使用 转自 https://www.cnblogs.com/pelli/p/6112996.html 并增加了部分代码. 代码思路:先在前端进行校验,合格之后 ...

  7. P1289 身份证号码验证

    P1289 身份证号码验证 描述 居民身份证是18位字符的编码,每个人的编码都是唯一的,校验规则如下: ∑(ai*wi)mod 11 = 1 i表示号码字符从左至右包括校验码字符在内的位置序号:ai表 ...

  8. 身份证号码验证验证 js_验证我的身份。 如果你可以的话…

    身份证号码验证验证 js I frequently hear questions like "How to implement authentication in an Android ap ...

  9. javascript身份证号码验证函数支持带x

    //--身份证号码验证-支持新的带x身份证 function isIdCardNo(num)  {     var factorArr = new Array(7,9,10,5,8,4,2,1,6,3 ...

  10. 身份证号码验证-支持新的带x身份证

    //--身份证号码验证-支持新的带x身份证 function isIdCardNo(num)  {     var factorArr = new Array(7,9,10,5,8,4,2,1,6,3 ...

最新文章

  1. 开源自动机器学习(AutoML)框架盘点
  2. ASP-JSP-NET 清空IE缓存
  3. 推荐一个牛逼的 GitHub 项目+支付宝、微信支付项目实战!快来获取!
  4. c# DirectoryInfo 类和 FileInfo 类
  5. 使用Jest进行单元测试
  6. base包中自定义activity
  7. httplistener java_Java监听器Listener使用详解
  8. 4.ID主键生成策略
  9. IOS开发之支付功能概述
  10. 为什么DNN的SectionHead Control图片无法显示,也无法折叠
  11. 毕业论文答辩技巧及注意事项(附答辩自述模板)~
  12. (GIS可视化)热力图
  13. 高中计算机奥林匹克竞赛试题及答案,高中数学奥林匹克竞赛试题及答案.doc
  14. 智能路由器-OpenWRT 系列六 (远程迅雷离线下载)
  15. python 百分号调用内置函数_建议你吃透python这68个内置函数!
  16. 计算机网络三大要素是,计算机网络安全的三大要素不包括?
  17. window11离线安装android子系统步骤
  18. 求关于oled屏的闪屏问题
  19. 今日学习——冒泡排序
  20. [DA45] 时间序列预测上证指数

热门文章

  1. 在spyder怎么升级_怎么更新spyder?
  2. Vue 电商后台管理项目阶段性总结
  3. 语音合成论文优选:One-shot Voice Conversion by Separating Speaker and Content Representations with Instance N
  4. 前端工程师和python工程师收入哪个高_前端工程师和后端工程师工资哪个高
  5. win10升级后 IE 火狐 谷歌浏览器 不能上网 解决办法
  6. 集合论第一章 3 集合论的公式和条件
  7. 软件测试 | 正交试验测试用例设计方法
  8. 搭建开源物联网平台教程
  9. qpython3 l_QPython 3(com.hipipal.qpy3) - 3.0.0 - 应用 - 酷安网
  10. java数据结构与算法总结(二十五)--初识BitSet之API