天涯之外

导航

中国身份证号码验证,支持15,18位,可验证成功90%的身份证号收藏

  1. <STRONG class=k>using</STRONG> System;   
  2.   
  3. <STRONG class=c>/// <summary>   
  4. </STRONG><STRONG class=c>/// Summary description for IDCardValid   
  5. </STRONG><STRONG class=c>/// </summary>   
  6. </STRONG><STRONG class=k>public</STRONG> <STRONG class=k>class</STRONG> IDCardValid   
  7. {   
  8.     <STRONG class=k>public</STRONG> IDCardValid()   
  9.     {   
  10.         <STRONG class=c>//   
  11. </STRONG>        <STRONG class=c>// TODO: Add constructor logic here   
  12. </STRONG>        <STRONG class=c>//   
  13. </STRONG>    }   
  14.   
  15.     <STRONG class=c>/// <summary>   
  16. </STRONG>    <STRONG class=c>/// 验证身份证号码   
  17. </STRONG>    <STRONG class=c>/// </summary>   
  18. </STRONG>    <STRONG class=c>/// <param name="Id">身份证号码</param>   
  19. </STRONG>    <STRONG class=c>/// <returns>验证成功为True,否则为False</returns>   
  20. </STRONG>    <STRONG class=k>public</STRONG> <STRONG class=k>static</STRONG> <STRONG class=k>bool</STRONG> CheckIDCard(<STRONG class=k>string</STRONG> Id)   
  21.     {   
  22.         <STRONG class=k>if</STRONG> (Id.Length == 18)   
  23.         {   
  24.             <STRONG class=k>bool</STRONG> check = CheckIDCard18(Id);   
  25.             <STRONG class=k>return</STRONG> check;   
  26.         }   
  27.         <STRONG class=k>else</STRONG> <STRONG class=k>if</STRONG> (Id.Length == 15)   
  28.         {   
  29.             <STRONG class=k>bool</STRONG> check = CheckIDCard15(Id);   
  30.             <STRONG class=k>return</STRONG> check;   
  31.         }   
  32.         <STRONG class=k>else</STRONG>   
  33.         {   
  34.             <STRONG class=k>return</STRONG> <STRONG class=k>false</STRONG>;   
  35.         }   
  36.     }   
  37. <STRONG class=r>    #region 身份证号码验证   
  38. </STRONG>   
  39.     <STRONG class=c>/// <summary>   
  40. </STRONG>    <STRONG class=c>/// 验证15位身份证号   
  41. </STRONG>    <STRONG class=c>/// </summary>   
  42. </STRONG>    <STRONG class=c>/// <param name="Id">身份证号</param>   
  43. </STRONG>    <STRONG class=c>/// <returns>验证成功为True,否则为False</returns>   
  44. </STRONG>    <STRONG class=k>private</STRONG> <STRONG class=k>static</STRONG> <STRONG class=k>bool</STRONG> CheckIDCard18(<STRONG class=k>string</STRONG> Id)   
  45.     {   
  46.         <STRONG class=k>long</STRONG> n = 0;   
  47.         <STRONG class=k>if</STRONG> (<STRONG class=k>long</STRONG>.TryParse(Id.Remove(17), <STRONG class=k>out</STRONG> n) == <STRONG class=k>false</STRONG> || n < Math.Pow(10, 16) || <STRONG class=k>long</STRONG>.TryParse(Id.Replace(<STRONG class=s>'x'</STRONG>, <STRONG class=s>'0'</STRONG>).Replace(<STRONG class=s>'X'</STRONG>, <STRONG class=s>'0'</STRONG>), <STRONG class=k>out</STRONG> n) == <STRONG class=k>false</STRONG>)   
  48.         {   
  49.             <STRONG class=k>return</STRONG> <STRONG class=k>false</STRONG>;<STRONG class=c>//数字验证   
  50. </STRONG>        }   
  51.         <STRONG class=k>string</STRONG> address = <STRONG class=s>"11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91"</STRONG>;   
  52.         <STRONG class=k>if</STRONG> (address.IndexOf(Id.Remove(2)) == -1)   
  53.         {   
  54.             <STRONG class=k>return</STRONG> <STRONG class=k>false</STRONG>;<STRONG class=c>//省份验证   
  55. </STRONG>        }   
  56.         <STRONG class=k>string</STRONG> birth = Id.Substring(6, 8).Insert(6, <STRONG class=s>"-"</STRONG>).Insert(4, <STRONG class=s>"-"</STRONG>);   
  57.         DateTime time = <STRONG class=k>new</STRONG> DateTime();   
  58.         <STRONG class=k>if</STRONG> (DateTime.TryParse(birth, <STRONG class=k>out</STRONG> time) == <STRONG class=k>false</STRONG>)   
  59.         {   
  60.             <STRONG class=k>return</STRONG> <STRONG class=k>false</STRONG>;<STRONG class=c>//生日验证   
  61. </STRONG>        }   
  62.         <STRONG class=k>string</STRONG>[] arrVarifyCode = (<STRONG class=s>"1,0,x,9,8,7,6,5,4,3,2"</STRONG>).Split(<STRONG class=s>','</STRONG>);   
  63.         <STRONG class=k>string</STRONG>[] Wi = (<STRONG class=s>"7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2"</STRONG>).Split(<STRONG class=s>','</STRONG>);   
  64.         <STRONG class=k>char</STRONG>[] Ai = Id.Remove(17).ToCharArray();   
  65.         <STRONG class=k>int</STRONG> sum = 0;   
  66.         <STRONG class=k>for</STRONG> (<STRONG class=k>int</STRONG> i = 0; i < 17; i++)   
  67.         {   
  68.             sum += <STRONG class=k>int</STRONG>.Parse(Wi[i]) * <STRONG class=k>int</STRONG>.Parse(Ai[i].ToString());   
  69.         }   
  70.         <STRONG class=k>int</STRONG> y = -1;   
  71.         Math.DivRem(sum, 11, <STRONG class=k>out</STRONG> y);   
  72.         <STRONG class=k>if</STRONG> (arrVarifyCode[y] != Id.Substring(17, 1).ToLower())   
  73.         {   
  74.             <STRONG class=k>return</STRONG> <STRONG class=k>false</STRONG>;<STRONG class=c>//校验码验证   
  75. </STRONG>        }   
  76.         <STRONG class=k>return</STRONG> <STRONG class=k>true</STRONG>;<STRONG class=c>//符合GB11643-1999标准   
  77. </STRONG>    }   
  78.   
  79.     <STRONG class=c>/// <summary>   
  80. </STRONG>    <STRONG class=c>/// 验证18位身份证号   
  81. </STRONG>    <STRONG class=c>/// </summary>   
  82. </STRONG>    <STRONG class=c>/// <param name="Id">身份证号</param>   
  83. </STRONG>    <STRONG class=c>/// <returns>验证成功为True,否则为False</returns>   
  84. </STRONG>    <STRONG class=k>private</STRONG> <STRONG class=k>static</STRONG> <STRONG class=k>bool</STRONG> CheckIDCard15(<STRONG class=k>string</STRONG> Id)   
  85.     {   
  86.         <STRONG class=k>long</STRONG> n = 0;   
  87.         <STRONG class=k>if</STRONG> (<STRONG class=k>long</STRONG>.TryParse(Id, <STRONG class=k>out</STRONG> n) == <STRONG class=k>false</STRONG> || n < Math.Pow(10, 14))   
  88.         {   
  89.             <STRONG class=k>return</STRONG> <STRONG class=k>false</STRONG>;<STRONG class=c>//数字验证   
  90. </STRONG>        }   
  91.         <STRONG class=k>string</STRONG> address = <STRONG class=s>"11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91"</STRONG>;   
  92.         <STRONG class=k>if</STRONG> (address.IndexOf(Id.Remove(2)) == -1)   
  93.         {   
  94.             <STRONG class=k>return</STRONG> <STRONG class=k>false</STRONG>;<STRONG class=c>//省份验证   
  95. </STRONG>        }   
  96.         <STRONG class=k>string</STRONG> birth = Id.Substring(6, 6).Insert(4, <STRONG class=s>"-"</STRONG>).Insert(2, <STRONG class=s>"-"</STRONG>);   
  97.         DateTime time = <STRONG class=k>new</STRONG> DateTime();   
  98.         <STRONG class=k>if</STRONG> (DateTime.TryParse(birth, <STRONG class=k>out</STRONG> time) == <STRONG class=k>false</STRONG>)   
  99.         {   
  100.             <STRONG class=k>return</STRONG> <STRONG class=k>false</STRONG>;<STRONG class=c>//生日验证   
  101. </STRONG>        }   
  102.         <STRONG class=k>return</STRONG> <STRONG class=k>true</STRONG>;<STRONG class=c>//符合15位身份证标准   
  103. </STRONG>    }   
  104. <STRONG class=r>    #endregion   
  105. </STRONG>}  

posted on 2009-02-18 14:36  天涯之外  阅读(2024)  评论(0编辑  收藏  举报