IDCardHelper幫助類庫 實現(xiàn)操作身份證驗證基類庫

身份證操作輔助類
綁定身份證類別的名稱
獲取身份證類別的名稱
驗證身份證結(jié)果
15位身份證明號碼轉(zhuǎn)化成18位用來編碼
獲取身份證對應(yīng)省份的區(qū)劃
獲取身份證對應(yīng)縣市的區(qū)劃
獲取身份證對應(yīng)地區(qū)的區(qū)劃
根據(jù)身份證判斷是否男女
根據(jù)身份證獲取出生年月


IDCardHelper幫助類庫源碼


using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.Data;
using System.Text.RegularExpressions;
 
namespace Commons
{
    /// <summary>
    /// 身份證操作輔助類
    /// </summary>
    public class IDCardHelper
    {
        private static DataTable dt_IdType;
        static IDCardHelper()
        {
            dt_IdType = new DataTable();
            dt_IdType.Columns.Add("text");
            dt_IdType.Columns.Add("value");
            dt_IdType.Rows.Add(new object[] { "居民身份證", "A" });
            dt_IdType.Rows.Add(new object[] { "軍官證", "C" });
            dt_IdType.Rows.Add(new object[] { "士兵證", "D" });
            dt_IdType.Rows.Add(new object[] { "軍官離退休證", "E" });
            dt_IdType.Rows.Add(new object[] { "境外人員身份證明", "F" });
            dt_IdType.Rows.Add(new object[] { "外交人員身份證明", "G" });
        }
 
        /// <summary>
        /// 綁定身份證類別的名稱
        /// </summary>
        /// <param name="cb">The cb.</param>
        public static void InitIdType(ComboBox cb)
        {
            cb.DataSource = dt_IdType;
            cb.DisplayMember = "text";
            cb.ValueMember = "value";
            cb.DropDownStyle = ComboBoxStyle.DropDownList;
        }
 
        /// <summary>
        /// 獲取身份證類別的名稱
        /// </summary>
        /// <returns></returns>
        public static DataTable CreateIDType()
        {
            return dt_IdType;
        }
 
        /// <summary>
        /// 驗證身份證結(jié)果
        /// </summary>
        /// <param name="idcard">身份證號碼</param>
        /// <returns>正確的時候返回string.Empty</returns>
        public static string Validate(string idcard)
        {
            if (idcard.Length != 18 && idcard.Length != 15)
            {
                return "身份證明號碼必須是15或者18位!";
            }
 
            Regex rg = new Regex(@"^\d{17}(\d|X)$");
            if (!rg.Match(idcard).Success)
            {
                return "身份證號碼必須為數(shù)字或者X!";
            }
            if (idcard.Length == 15)
            {
                idcard = IdCard15To18(idcard);
            }
            else if (idcard.Length == 18)
            {
                int ll_sum = 0, tmp = 0;
                for (int i = 0; i < 17; i  )
                {
                    tmp = int.Parse(idcard.Substring(i, 1));
                    ll_sum  = tmp * li_quan[i];
                }
                ll_sum = ll_sum % 11;
                if (idcard.Substring(17, 1) != ls_jy[ll_sum])
                {
                    return "身份證號碼最后一位應(yīng)該是"   ls_jy[ll_sum]   "!";
                }
            }
 
 
            try
            {
                DateTime.Parse(idcard.Substring(6, 4)   "-"   idcard.Substring(10, 2)   "-"   idcard.Substring(12, 2));
            }
            catch
            {
                return "非法生日";
            }
            return string.Empty;
        }
 
 
 
        private static string[] ls_jy = { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2" };
        private static int[] li_quan = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
 
        /// <summary>
        /// 15位身份證明號碼轉(zhuǎn)化成18位用來編碼
        /// </summary>
        /// <param name="idcard">15位的身份證號碼</param>
        /// <returns></returns>
        public static string IdCard15To18(string idcard)
        {
            /*
              
             string ls_jy[] =  { "1", "0", "X", "9", "8", "7", "6", "5", "4", "3", "2"}, t, ls_sfzmhm
integer li_quan[] =  { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1}
int ll_sum = 0, i
 
ls_sfzmhm = mid(sfzmhm, 1, 6)   '19'   mid(sfzmhm, 7)
for i = 1 to len(ls_sfzmhm)
    ll_sum  = integer(mid(ls_sfzmhm, i, 1)) * li_quan[i]
next
 
ll_sum = mod(ll_sum, 11)
 
ls_sfzmhm  = ls_jy[ll_sum   1]
 
return ls_sfzmhm
             */
 
            if (idcard == null || idcard.Length != 15)
            {
                return idcard;
            }
            else
            {
                string result = string.Empty;
                int ll_sum = 0, tmp = 0;
                result = idcard.Substring(0, 6)   "19"   idcard.Substring(6, 9);
                for (int i = 0; i < 17; i  )
                {
                    tmp = int.Parse(result.Substring(i, 1));
                    ll_sum  = tmp * li_quan[i];
                }
                ll_sum = ll_sum % 11;
                result  = ls_jy[ll_sum];
                return result;
 
            }
        }
 
        /// <summary>
        /// 獲取身份證對應(yīng)省份的區(qū)劃
        /// </summary>
        /// <param name="id">身份證</param>
        /// <returns>頭兩位 4個0</returns>
        public static string GetProvince(string id)
        {
            return id.Substring(0, 2)   "0000";
        }
 
        /// <summary>
        /// 獲取身份證對應(yīng)縣市的區(qū)劃
        /// </summary>
        /// <param name="id">身份證</param>
        /// <returns>頭4位 2個0</returns>
        public static string GetCity(string id)
        {
            return id.Substring(0, 4)   "00";
        }
 
        /// <summary>
        /// 獲取身份證對應(yīng)地區(qū)的區(qū)劃
        /// </summary>
        /// <param name="id">身份證</param>
        /// <returns>頭6位</returns>
        public static string GetArea(string id)
        {
            return id.Substring(0, 6);
        }
 
        /// <summary>
        /// 根據(jù)身份證判斷是否男女
        /// </summary>
        /// <param name="id">身份證號碼</param>
        /// <returns>返回"男"或者"女"</returns>
        public static string GetSexName(string id)
        {
            int sexStr = 0;
            if (id.Length == 15)
            {
                sexStr = Convert.ToInt32(id.Substring(14, 1));
            }
            else if (id.Length == 18)
            {
                sexStr = Convert.ToInt32(id.Substring(16, 1));
            }
            else
            {
                throw new ArgumentException("身份證號碼不是15或者18位!");
            }
            return sexStr % 2 == 0 ? "女" : "男";
        }
 
        /// <summary>
        /// 根據(jù)身份證獲取出生年月
        /// </summary>
        /// <param name="id">身份證號碼</param>
        /// <returns>出生年月</returns>
        public static DateTime GetBirthday(string id)
        {
            string result = string.Empty;
            if (id.Length == 15)
            {
                result = "19"   id.Substring(6, 2)   "-"   id.Substring(8, 2)   "-"   id.Substring(10, 2);
            }
            else if (id.Length == 18)
            {
                result = id.Substring(6, 4)   "-"   id.Substring(10, 2)   "-"   id.Substring(12, 2);
            }
            else
            {
                throw new ArgumentException("身份證號碼不是15或者18位!");
            }
            return Convert.ToDateTime(result);
        }
    }
}


原文鏈接:C#身份證驗證幫助類,IDCardHelper幫助類庫