身份证类 (UserLib.Word.Person.IDCard)

以下程序是整合了网上的一些通常的算法编写的。

using System;

using System.Text;

using System.Collections;

using System.Text.RegularExpressions;

 

namespace UserLib.World.Person

{

     /// <summary>

     /// 身份证类

     /// </summary>

     public class IDCard

     {

         /// <summary>

         /// 省市自治区数组

         /// </summary>

         private static string[] city=

         {

              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,

              "国外"

         };

 

         /// <summary>

         /// 取得校验码

         /// </summary>

         /// <param name="cid">身份证号码</param>

         /// <returns>校验码</returns>

         private static string GetCheckCode(string cid)

         {

              string[] check = {"1","0","X","9","8","7","6","5","4","3","2"};

              int[] weight = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1};

              int rs = 0;

              for (int i=0;i<=cid.Length-1;i++ )

              {

                   rs += int.Parse(cid.Substring(i,1)) * weight[i];

              }

              rs = rs % 11;

              return check[rs];

         }

 

         /// <summary>

         /// 身份证位转位

         /// </summary>

         /// <param name="cid">15位身份证号码</param>

         /// <returns>18位身份证号码</returns>

         public static string CID15To18(string cid)

         {

              string rs=cid.Substring(0,6) + "19" +cid.Substring(6);

              rs+=GetCheckCode(cid);

              return rs;

         }

 

         /// <summary>

         /// 身份证的校验

         /// </summary>

         /// <param name="cid">身份证号码</param>

         /// <returns>是否通过校验</returns>

         public static bool Validate(string cid)

         {

              ArrayList msg;

              bool rs=Validate(cid,out msg);

              return rs;

         }

 

         /// <summary>

         /// 身份证的校验

         /// </summary>

         /// <param name="cid">身份证号码</param>

         /// <param name="msg">校验失败信息</param>

         /// <returns>是否通过校验</returns>

         public static bool Validate(string cid,out ArrayList msg)

         {   

              msg=new ArrayList();

 

              //判断格式正确性

              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)

              {

                   msg.Add("格式非法");

              }

             

              //判断地区正确性

              if(city[int.Parse(cid.Substring(0,2))]==null)

              {

                   msg.Add("地区非法");

              }

 

              //判断出生日期正确性

              try

              {

                   DateTime.Parse(cid.Substring(6,4)+"-"+cid.Substring(10,2)+"-"+cid.Substring(12,2));

              }

              catch

              {

                   msg.Add("出生日期非法");

              }

 

              //判断校验码正确性

              if (cid.Substring(17,1)!=GetCheckCode(cid))

              {

                   msg.Add("校验码非法");

              }

             

              if (msg.Count==0)

              {

                   return true;

              }

              else

              {

                   return false;

              }

         }

 

         /// <summary>

         /// 取得身份证信息

         /// </summary>

         /// <param name="cid">身份证号码</param>

         /// <param name="province">省份</param>

         /// <param name="birDate">出生年月</param>

         /// <param name="sex">性别</param>

         /// <returns>是否为有效的身份证号码</returns>

         public static bool GetInfo(string cid,out string province,out DateTime birDate,out string sex)

         {

              province="";

              birDate=DateTime.Parse("2000-01-01");

              sex="";

              if (Validate(cid))

              {

                   province=city[int.Parse(cid.Substring(0,2))];

                   birDate=DateTime.Parse(cid.Substring(6,4)+"-"+cid.Substring(10,2)+"-"+cid.Substring(12,2));

                   sex=int.Parse(cid.Substring(16,1))%2==1?"":"";

                   return true;

              }

              else

              {

                   return false;

              }

         }

 

     }

}

 

发布了18 篇原创文章 · 获赞 8 · 访问量 8万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章