1 /// <summary>
 2 /// 根据身份证获取身份证信息
 3 /// 18位身份证
 4 /// 0地区代码(1~6位,其中1、2位数为各省级政府的代码,3、4位数为地、市级政府的代码,5、6位数为县、区级政府代码)
 5 /// 1出生年月日(7~14位)
 6 /// 2顺序号(15~17位单数为男性分配码,双数为女性分配码)
 7 /// 3性别
 8 /// 
 9 /// 15位身份证
10 /// 0地区代码 
11 /// 1出生年份(7~8位年,9~10位为出生月份,11~12位为出生日期 
12 /// 2顺序号(13~15位),并能够判断性别,奇数为男,偶数为女
13 /// 3性别
14 /// </summary>
15 /// <param name="cardid"></param>
16 /// <returns></returns>
17 public string[] getidcardinfo(string cardid)
18 {
19   string[] info = new string[4];
20 
21   if (string.isnullorempty(cardid))
22   {
23     return info;
24   }
25 
26   try
27   {
28     system.text.regularexpressions.regex regex = null;
29     if (cardid.length == 18)
30     {
31       regex = new regex(@"^\d{17}(\d|x|x)$");
32       if (regex.ismatch(cardid))
33       {
34 
35         info.setvalue(cardid.substring(0, 6), 0);
36         info.setvalue(datetime.parseexact(cardid.substring(6, 8), "yyyymmdd", cultureinfo.currentculture).tostring("yyyy-mm-dd"), 1);
37         info.setvalue(cardid.substring(14, 3), 2);
38         info.setvalue(convert.toint32(info[2]) % 2 != 0 ? "男" : "女", 3);
39       }
40     }
41     else if (cardid.length == 15)
42     {
43       regex = new regex(@"^\d{15}");
44       if (regex.ismatch(cardid))
45       {
46         info.setvalue(cardid.substring(0, 6), 0);
47         info.setvalue(datetime.parseexact(cardid.substring(6, 6), "yyyymmdd", cultureinfo.currentculture).tostring("yyyy-mm-dd"), 1);
48         info.setvalue(cardid.substring(12, 3), 2);
49         info.setvalue(convert.toint32(info[2]) % 2 != 0 ? "男" : "女", 3);
50       }
51     }
52   }
53   catch (exception ex)
54   {
55     info[0] = ex.message;
56   }
57 
58   return info;
59 }