1 /// <summary>
2 /// 身份证验证
3 /// </summary>
4 /// <param name="Id">身份证号</param>
5 /// <returns></returns>
6 public bool CheckIDCard(string Id)
7 {
8 if (Id.Length == 18)
9 {
10 bool check = CheckIDCard18(Id);
11 return check;
12 }
13 else if (Id.Length == 15)
14 {
15 bool check = CheckIDCard15(Id);
16 return check;
17 }
18 else
19 {
20 return false;
21 }
22 }
23 /// <summary>
24 /// 18位身份证验证
25 /// </summary>
26 /// <param name="Id">身份证号</param>
27 /// <returns></returns>
28 private bool CheckIDCard18(string Id)
29 {
30 long n = 0;
31 if (long.TryParse(Id.Remove(17), out n) == false || n < Math.Pow(10, 16) || long.TryParse(Id.Replace('x', '0').Replace('X', '0'), out n) == false)
32 {
33 return false;//数字验证
34 }
35 string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
36 if (address.IndexOf(Id.Remove(2)) == -1)
37 {
38 return false;//省份验证
39 }
40 string birth = Id.Substring(6, 8).Insert(6, "-").Insert(4, "-");
41 DateTime time = new DateTime();
42 if (DateTime.TryParse(birth, out time) == false)
43 {
44 return false;//生日验证
45 }
46 string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');
47 string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');
48 char[] Ai = Id.Remove(17).ToCharArray();
49 int sum = 0;
50 for (int i = 0; i < 17; i++)
51 {
52 sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());
53 }
54 int y = -1;
55 Math.DivRem(sum, 11, out y);
56 if (arrVarifyCode[y] != Id.Substring(17, 1).ToLower())
57 {
58 return false;//校验码验证
59 }
60 return true;//符合GB11643-1999标准
61 }
62 /// <summary>
63 /// 15位身份证验证
64 /// </summary>
65 /// <param name="Id">身份证号</param>
66 /// <returns></returns>
67 private bool CheckIDCard15(string Id)
68 {
69 long n = 0;
70 if (long.TryParse(Id, out n) == false || n < Math.Pow(10, 14))
71 {
72 return false;//数字验证
73 }
74 string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
75 if (address.IndexOf(Id.Remove(2)) == -1)
76 {
77 return false;//省份验证
78 }
79 string birth = Id.Substring(6, 6).Insert(4, "-").Insert(2, "-");
80 DateTime time = new DateTime();
81 if (DateTime.TryParse(birth, out time) == false)
82 {
83 return false;//生日验证
84 }
85 return true;//符合15位身份证标准
86 }