【学习】身份证号获取个人信息

来源:互联网 发布:mysql 数据库设计模式 编辑:程序博客网 时间:2024/05/17 03:18

          身份证具有明显的代表唯一性,通过身份证号可以获取到哪些信息?社保在校验添加缴费人信息时,需要根据输入的身份证号获取信息,格式验证通过后将获取到的信息填充。这就需要了解一些规格。


   现在新一代的身份证居多,这里以18位的新身份证为例,第十五位到十七位(也可理解判断倒数第二位的奇偶数)是奇数为男,偶数为女。(不信可以查看自己的身份证号核实)

   

   前六位:是第一次领取民身份证时的常住户口所在县(市、旗、区)的行政区划代码。(所有区域的编码可以到这个网站http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t20170310_1471429.html查询到最新的县及县以上的行政编码资料。)首先前两位代码省份:11——北京 12——天津 13——河北 14——山西 15——内蒙古自治区 另四位代表你户口所在的市县   

                       

   第七位到第十四位表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。


   第十五为到十七位:判断性别的神数字。奇数为男性,偶数为女性。


   最后一位 :是根据前面十七位数字码,按照ISO7064:1983.MOD11-2校验码计算出来的检验码(通常是 1,0,x,9,8,7,6,5,4,3,2)。


   


  代码:

public static bool CheckChinaIDCardNumberFormat(string idCardNumber)        {            string idNumber = idCardNumber;            bool result = true;            try            {                if (idNumber.Length != 18)                {                    return false;                }                long n = 0;                if (long.TryParse(idNumber.Remove(17), out n) == false                    || n < Math.Pow(10, 16) || long.TryParse(idNumber.Replace('x', '0').Replace('X', '0'), out n) == false)                {                    return false;//数字验证                  }                string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";                if (address.IndexOf(idNumber.Remove(2)) == -1)                {                    return false;//省份验证                  }                string birth = idNumber.Substring(6, 8).Insert(6, "-").Insert(4, "-");                DateTime time = new DateTime();                if (DateTime.TryParse(birth, out time) == false)                {                    return false;//生日验证                  }                string[] arrVarifyCode = ("1,0,x,9,8,7,6,5,4,3,2").Split(',');                string[] Wi = ("7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2").Split(',');                char[] Ai = idNumber.Remove(17).ToCharArray();                int sum = 0;                for (int i = 0; i < 17; i++)                {                    sum += int.Parse(Wi[i]) * int.Parse(Ai[i].ToString());                }                int y = -1;                Math.DivRem(sum, 11, out y);                if (arrVarifyCode[y] != idNumber.Substring(17, 1).ToLower())                {                    return false;//校验码验证                  }                return true;//符合GB11643-1999标准             }            catch (Exception ex)            {                logger.Error("CheckChinaIDCardNumber 身份证校验失败  号码:" + idNumber, ex);                result = false;            }            return result;        } 
      /// <summary>        /// 获取性别   -1 出错  0男  1女        /// </summary>        /// <param name="idCardNumber"></param>        /// <returns></returns>    public static int GetSexFromChinaIDCardNumber(string idCardNumber)         {            int sex = -1;            try            {                string sexStr = idCardNumber.Substring(14, 3);                if (int.Parse(sexStr) % 2 == 0)                {                    return SexEnum.Female;//1;                }                else                {                    return SexEnum.Man; ;                }            }            catch (Exception ex)            {                logger.Error("GetSexFromChinaIDCardNumber 通过身份证获取性别失败:" + idCardNumber, ex);            }            return sex;        }

 
原创粉丝点击