欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

c#根据身份证获取身份证信息

程序员文章站 2022-03-20 12:25:27
1 /// 2 /// 根据身份证获取身份证信息 3 /// 18位身份证 4 /// 0地区代码(1~6位,其中1、2位数为各省级*的代码,3、4位数为地、市级*的代码,5、6位数为县、区级*代码) 5 /// 1出生年月日(7~14位) 6 /// 2顺序号(15~17位单数为男性分配码,... ......
 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 }