身份证号码验证

来源:互联网 发布:单片机 interrupt用法 编辑:程序博客网 时间:2024/04/29 18:40

//说明:验证身份证的有效性

//参数: cid -身份证号码

//返回:  地方-出生时间-性别

private string CheckCidInfo(string cid)
   {
   //输入限制
    if (cid.Length != 18)
    {
     string warrnig = "";
     warrnig = "身份证号码输入长度不正确!";
     for (int i = 0; i < cid.Length - 1; i++)
     {
      if (cid[i]>'9'||cid[i ]<'0')
      {
       warrnig += "身份证号码中包含非法字符!";
       return warrnig;
      }
    }
    
    }
    if (cid.Length == 18)
    {
     string warrnig = "";
     for (int i = 0; i < cid.Length - 1; i++)
     {
      if (cid[i] > '9' || cid[i] < '0')
      {
       warrnig = "身份证号码中包含非法字符!";
       return warrnig;
      }
     }
     char c = cid [cid.Length -1];
     bool last = false;
     if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
     {
      last = true;
     }
     if (!last)
     {
      warrnig = "身份证末位号码中包含非法字符!";
      last = false;
      return warrnig;
     }
    }
   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?"男":"女"));

  
   }

原创粉丝点击