C#實現的18位身份證格式驗證算法_.Net教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!

      推薦:ASP.NET中Datagrid常見錯誤
      摘要:學習如何避免在使用 ASP.NET Datagrid 控件進行開發時可能發生的一些常見錯誤。 Datagrid 控件是 Microsoft? ASP.NET 中功能最強、用途最廣的 Web 控件之一,這一點已經得到了 ASP.NET

      18位身份證標準在國家質量技術監督局于1999年7月1日實施的GB11643-1999《公民身份號碼》中做了明確的規定。 GB11643-1999《公民身份號碼》為GB11643-1989《社會保障號碼》的修訂版,其中指出將原標準名稱"社會保障號碼"更名為"公民身份號碼",另外GB11643-1999《公民身份號碼》從實施之日起代替GB11643-1989。GB11643-1999《公民身份號碼》主要內容如下:
      一、范圍
      該標準規定了公民身份號碼的編碼對象、號碼的結構和表現形式,使每個編碼對象獲得一個唯一的、不變的法定號碼。
      二、編碼對象
      公民身份號碼的編碼對象是具有中華人民共和國國籍的公民。
      三、號碼的結構和表示形式
      1、號碼的結構
      公民身份號碼是特征組合碼,由十七位數字本體碼和一位校驗碼組成。排列順序從左至右依次為:六位數字地址碼,八位數字出生日期碼,三位數字順序碼和一位數字校驗碼。
      2、地址碼
      表示編碼對象常住戶口所在縣(市、旗、區)的行政區劃代碼,按GB/T2260的規定執行。
      3、出生日期碼
      表示編碼對象出生的年、月、日,按GB/T7408的規定執行,年、月、日代碼之間不用分隔符。
      4、順序碼
      表示在同一地址碼所標識的區域范圍內,對同年、同月、同日出生的人編定的順序號,順序碼的奇數分配給男性,偶數分配給女性。
      5、校驗碼
      (1)十七位數字本體碼加權求和公式
      S = Sum(Ai * Wi), i = 0, ... , 16 ,先對前17位數字的權求和
      Ai:表示第i位置上的身份證號碼數字值
      Wi:表示第i位置上的加權因子
      Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2
      (2)計算模
      Y = mod(S, 11)

      (3)通過模得到對應的校驗碼
      Y: 0 1 2 3 4 5 6 7 8 9 10
      校驗碼: 1 0 X 9 8 7 6 5 4 3 2
      四、舉例如下:
      北京市朝陽區: 11010519491231002X
      廣東省汕頭市: 440524188001010014



      以下是程序代碼:
      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))*int.Parse(cid[17-i].ToString(),System.Globalization.NumberStyles.HexNumber);

      }
      if(iSum!=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"));

      分享:在網頁中動態的生成一個圖片
      大家知道股票網站的K線圖是動態生成的定時刷新PHP 就有動態生成圖片的功能.那么怎樣用asp.net在網頁中動態的生成一個圖片呢? 下面我要舉的例子是動態的生成一個圖片顯示當前時間.

      來源:模板無憂//所屬分類:.Net教程/更新時間:2008-08-22
      相關.Net教程