身份证工具类

 1 using System;
 2 using System.Text.RegularExpressions;
 3 
 4 namespace com.hooPony.utils.utils
 5 {
 6     /// <summary>
 7     /// 中国居民身份证工具类
 8     /// <code>@author hooPony</code>
 9     /// 前6位是地址码,表示登记户口时所在地的行政区划代码,依照《*行政区划代码》国家标准(GB/T2260)的规定执行。
10     /// 7到14位是出生年月日,采用YYYYMMDD格式。
11     /// 15到17位是顺序码,表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编订的顺序号,顺序码的奇数分配给男性,偶数分配给女性,即第17位奇数表示男性,偶数表示女性。
12     /// 第18位是校验码,采用ISO 7064:1983, MOD 11-2校验字符系统。
13     /// </summary>
14     public class IDCard
15     {
16         /// <summary>
17         /// 加权因子
18         /// </summary>
19         private static int[] MOD = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
20 
21         /// <summary>
22         /// 校验码
23         /// </summary>
24         private static char[] VERCODE = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
25 
26         /// <summary>
27         /// 验证身份证是否符合国家标准,地址码可能不准确
28         /// </summary>
29         /// <param name="idcard">身份证号</param>
30         /// <returns></returns>
31         public static bool verify(string idcard)
32         {
33             if (idcard == null || idcard.Length != 18)
34             {
35                 return false;
36             }
37             string regex = "^(1[1-5]{1}|2[1-3]{1}|3[1-7]{1}|4[1-6]{1}|5[0-4]{1}|6[1-5]{1}){1}(([0-7]{1}[0-9]{1}|90){1}[0-9]{1}[0-9]{1}(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229)){1}([0-9]{1}[0-9]{1}[0-9]{1}([0-9]{1}|x|X){1}){1}$";
38             bool res = Regex.IsMatch( idcard, regex);
39             if (!res)
40             {
41                 return false;
42             }
43             // 检验校验码
44             char[] chars = idcard.ToCharArray();
45             int sum = 0;
46             try
47             {
48                 for (int i = 0; i < MOD.Length; i++)
49                 {
50                     sum += int.Parse(chars[i].ToString()) * MOD[i];
51                 }
52             }
53             catch (Exception e)
54             {
55                 return false;
56             }
57             if (chars[chars.Length - 1] != VERCODE[sum % 11])
58             {
59                 return false;
60             }
61             return true;
62         }
63     }
64 }

 

上一篇:身份证计算器


下一篇:汇编-MOV指令