IDCardHelper

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    /// <summary>
    /// 身份证帮助类
    /// </summary>
    public class IDCardHelper
    {
        /// <summary>
        /// 通过身份证获取用户信息
        /// </summary>
        /// <param name="identityCard">用户身份证</param>
        /// <returns></returns>
        public static Dictionary<string,string> ConvertIdCardToInfo(string identityCard)
        {
            //18正则表达式^([1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx])$
            //15正则表达式^([1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx])$
            //完整正则表达式 ([1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx])|([1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx])

            var returnDic = new Dictionary<string, string>();
            string birth = string.Empty;
            string sex = string.Empty;
            try
            {
                //验证是否是身份证
                string expression = @"^([1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx])|([1-9]\d{5}\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{2}[0-9Xx])$";
                if (Regex.IsMatch(identityCard, expression, RegexOptions.Compiled) == false)
                {
                    return null;
                }


                string birthday = "";
                if (identityCard.Length == 18)//处理18位的身份证号码从号码中得到生日和性别代码
                {
                    birthday = identityCard.Substring(6, 4) + "-" + identityCard.Substring(10, 2) + "-" + identityCard.Substring(12, 2);
                    sex = identityCard.Substring(16, 1);
                }
                if (identityCard.Length == 15)
                {
                    birthday = "19" + identityCard.Substring(6, 2) + "-" + identityCard.Substring(8, 2) + "-" + identityCard.Substring(10, 2);
                    sex = identityCard.Substring(12, 3);
                }

                if (int.Parse(sex) % 2 == 0)//性别代码为偶数是女性奇数为男性
                {
                    sex = "F";
                }
                else
                {
                    sex = "M";

                }
                returnDic.Add("birthday", birthday);
                returnDic.Add("sex", sex);
                return returnDic;
            }
            catch (Exception ex)
            {
                return null;
            }
        }
    }
}

posted @ 2019-03-14 11:31  小螃蟹夹子  阅读(253)  评论(0编辑  收藏  举报