身份證類 (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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章