1. 程式人生 > 其它 >C#身份證工具類

C#身份證工具類

 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 }