<STRONG class=k>using</STRONG> System;

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