C#验证身份证的函数

这段C#代码主要是验证身份证的开头和身份证的格式和长度是否正确,没有按照身份证的编码规则进行严格验证

/// <summary>
    /// 验证身份证是否合法
    /// </summary>
    /// <param name="idCard">要验证的身份证</param>
    public static bool IsIdCard(string idCard)
    {
      //如果为空,认为验证合格
      if (IsNullOrEmpty(idCard))
      {
        return true;
      }

      //清除要验证字符串中的空格
      idCard = idCard.Trim();

      //模式字符串
      StringBuilder pattern = new StringBuilder();
      pattern.Append(@"^(11|12|13|14|15|21|22|23|31|32|33|34|35|36|37|41|42|43|44|45|46|");
      pattern.Append(@"50|51|52|53|54|61|62|63|64|65|71|81|82|91)");
      pattern.Append(@"(\d{13}|\d{15}[\dx])$");

      //验证
      return RegexHelper.IsMatch(idCard, pattern.ToString());
    }

更为复杂些的验证方法:

private string CheckCidInfo(string cid)
 {
  string[] aCity = new string[]{null,null,null,null,null,null,null,null,null,null,null,"北京","天津","河北","山西","内蒙古",null,null,null,null,null,"辽宁","吉林","黑龙江",null,null,null,null,null,null,null,"上海","江苏","浙江","安微","福建","江西","山东",null,null,null,"河南","湖北","湖南","广东","广西","海南",null,null,null,"重庆","四川","贵州","云南","西藏",null,null,null,null,null,null,"陕西","甘肃","青海","宁夏","新疆",null,null,null,null,null,"台湾",null,null,null,null,null,null,null,null,null,"香港","澳门",null,null,null,null,null,null,null,null,"国外"};
  double iSum=0;
  string info="";
  System.Text.RegularExpressions.Regex rg = new System.Text.RegularExpressions.Regex(@"^\d{17}(\d|x)$");
  System.Text.RegularExpressions.Match mc = rg.Match(cid);
  if(!mc.Success)
  {
  return "";
  }
  cid = cid.ToLower();
  cid = cid.Replace("x","a");
  if(aCity[int.Parse(cid.Substring(0,2))]==null)
  {
  return "非法地区";
  }
  try
  {
  DateTime.Parse(cid.Substring(6,4)+"-"+cid.Substring(10,2)+"-"+cid.Substring(12,2));
  }
  catch
  {
  return "非法生日";
  }
  for(int i=17;i>=0;i--)
  {
  iSum +=(System.Math.Pow(2,i)%11)*int.Parse(cid[17-i].ToString(),System.Globalization.NumberStyles.HexNumber);

  }
  if(iSum%11!=1)
  return("非法证号");

  return(aCity[int.Parse(cid.Substring(0,2))]+","+cid.Substring(6,4)+"-"+cid.Substring(10,2)+"-"+cid.Substring(12,2)+","+(int.Parse(cid.Substring(16,1))%2==1¡"男":"女"));

 }

调用测试:
Response.Write(CheckCidInfo("340524198002300019"));
Response.Write(CheckCidInfo("34052419800101001x"));

方法三:

/// <summary>
/// 身份证验证
/// </summary>
/// <param name="Id">身份证号</param>
/// <returns></returns>
public bool CheckIDCard(string Id)
{
  if (Id.Length == 18)
  {
     bool check = CheckIDCard18(Id);
     return check;
   }
   else if (Id.Length == 15)
   {
     bool check = CheckIDCard15(Id);
     return check;
   }
   else
   {
     return false;
   }
 }
 /// <summary>
 /// 18位身份证验证
 /// </summary>
 /// <param name="Id">身份证号</param>
 /// <returns></returns>
 PRivate bool CheckIDCard18(string Id)
 {
   long n = 0;
   if (long.TryParse(Id.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(Id.Replace('x', '0').Replace('X', '0'), out n) == false)
   {
     return false;//数字验证
   }
   string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
   if (address.IndexOf(Id.Remove(2)) == -1)
   {
     return false;//省份验证
   }
   string birth = Id.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 = Id.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] != Id.Substring(17, 1).ToLower())
   {
     return false;//校验码验证
   }
   return true;//符合GB11643-1999标准
 }
 /// <summary>
 /// 15位身份证验证
 /// </summary>
 /// <param name="Id">身份证号</param>
 /// <returns></returns>
 private bool CheckIDCard15(string Id)
 {
   long n = 0;
   if (long.TryParse(Id, out n) == false || n < Math.Pow(10, 14))
   {
     return false;//数字验证
   }
   string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
   if (address.IndexOf(Id.Remove(2)) == -1)
   {
     return false;//省份验证
   }
   string birth = Id.Substring(6, 6).Insert(4, "-").Insert(2, "-");
   DateTime time = new DateTime();
   if (DateTime.TryParse(birth, out time) == false)
   {
     return false;//生日验证
   }
   return true;//符合15位身份证标准
 }

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • C#将隐私信息(银行账户,身份证号码)中间部分特殊字符替换成*

    大家在银行交易某些业务时,都可以看到无论是身份证.银行账号中间部分都是用*号替换的,下面小编把代码整理如下: /// <summary> /// 将传入的字符串中间部分字符替换成特殊字符 /// </summary> /// <param name="value">需要替换的字符串</param> /// <param name="startLen">前保留长度</param> /// <

  • 基于C#技术实现身份证识别功能

    最近研究C#相关的ORC技术,图像识别一般C和C++这种底层语言做的比较多,C#主要是依托一些封装好的组件进行调用,这里介绍三种身份证识别的方法. 一:调用大公司API接口,百度.云脉,文通科技都有相关的API介绍. 二:调用图像处理类库,EmguCV是OpenCV的一个跨平台的.Net封装,该封装也可以被编译到Mono平台和允许在Windows.Mac OS.Android.iPhone.iPad等多个平台上运行 三:调用Office2007 组件 一.证件识别API接口 以聚合数据中的API

  • C#身份证号码验证是否正确

    C#实现身份证号码验证实例代码: protected void Page_Load(object sender, EventArgs e) { string str = "11010519491231002X"; bool result = CheckCardId(str); if (result == true) { Response.Write("Yes!"); } else { Response.Write("No!"); } } ///

  • 使用C#写了一个可以推算火车票身份证号码的小程序

    1. 火车票上*号打的是月,日,理论上的有最大366种组合: 2. 校验码是最后的一位,0-9及X,11个结果: 3. 那么,通过火车票上的身份证号,可以得到33个左右真正的有效身份证号: 4. 如果你能知道对方的星座(嗯,大家不是经常曝自己是什么星座么),那么,再将这30多个结果映射到12个星座中,最终可能性只有2-3个... 5. 结论:晒车票,一定要打码 using System; using System.Collections.Generic; using System.Linq; u

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

    本文实例讲述了C#实现身份证号码验证的方法.分享给大家供大家参考.具体实现方法如下: 随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很简单. 主要注意的是,目前的身份证分为16和18位,然后分别验证校验位,省份,生日即可. 主要类如下: 复制代码 代码如下: /// <summary>  /// 验证身份证号码类  /// </summary>  public class IDCardValidation  {   

  • C#小程序15位转18位身份证号代码

    现在我们使用的都是18位身份证号,而以前都是15位身份证号,而如何将15位身份证号转18位身份证号转换为18位身份证号呢? 1.首先,在15位身份证的第6位之后加上"19"变为17位,即出生年月的年加上19,比如原来的92年就变为1992 2.然后,就是最后一位的计算,方法如下: 1)将1得到的17位身份证号,每一位乘以相应的系数,17位系数为{ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 } 2)将(1)求得17个数相加求和

  • C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)

    好东西都需要人去整理.分类 注意:需要引用命名空间 SyntacticSugar 用法: /***扩展函数名细***/ //[IsInRange] int num = 100; //以前写法 if (num > 100 & num < 1000) { } //现在写法 if (num.IsInRange(100, 1000)) { } //datetime类型也支持 //[IsNullOrEmpty] object s = ""; //以前写法 if (s == n

  • C#身份证验证小例子

    复制代码 代码如下: private string CheckCidInfo(string cid)        {            string[] aCity = new string[] { null, null, null, null, null, null, null, null, null, null, null, "北京", "天津", "河北", "山西", "内蒙古", null,

  • C#实现验证身份证是否合法的方法

    本文实例讲述了C#实现验证身份证是否合法的方法.分享给大家供大家参考.具体分析如下: 这段C#代码主要是验证身份证的开头和身份证的格式和长度是否正确,没有按照身份证的编码规则进行严格验证 /// <summary> /// 验证身份证是否合法 /// </summary> /// <param name="idCard">要验证的身份证</param> public static bool IsIdCard(string idCard)

  • C#根据身份证号码判断出生日期和性别

    18位的身份证,前面六位代表了你户籍所在地,第七位到第十四位代表了你的出生年月,第十五位到第十七为代表了你的性别(偶数为女,奇数为男),根据这一信息,我在系统开发的录入员工的身份证后控件焦点转移时根据身份证号码获得生日和性别. 用C#写的代码如下: /// <summary> /// 在控件验证 textBox_IdentityCard 的 Validated事件中定义身份证号码的合法性并根据身份证号码得到生日和性别 /// </summary> private void text

随机推荐