身份证验证并计算

 public static class IdCardHelper
    {
        static readonly int[] Weight = new int[] { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
        static readonly char[] VCode = new char[] { ‘1‘, ‘0‘, ‘X‘, ‘9‘, ‘8‘, ‘7‘, ‘6‘, ‘5‘, ‘4‘, ‘3‘, ‘2‘ };
        private const string Address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
        //定义成年人标准
        private const int AuditAge = 18;

        /// <summary>
        /// 身份证号码检查,返回用户的年龄,生日,性别,验证是否合法等。
        /// </summary>
        /// <param name="idCardNumList"></param>
        /// <returns></returns>
        public static List<IdCardUserInfo> CheckIdentityCard(List<string> idCardNumList)
        {
            var list = new List<IdCardUserInfo>();
            if (idCardNumList == null || idCardNumList.Count <= 0)
                return list;
            foreach (var idCardNum in idCardNumList)
            {
                var user = new IdCardUserInfo { IdCardNum = idCardNum };
                ProcessIdCard(idCardNum, user);
                list.Add(user);
            }
            return list;
        }

        static void ProcessIdCard(string idCardNum, IdCardUserInfo user)
        {
            try
            {
                bool valid;
                if (idCardNum.Length == 18)
                {
                    var age = GetAge(idCardNum.Substring(6, 4));
                    var birthday = idCardNum.Substring(6, 4) + "-" + idCardNum.Substring(10, 2) + "-" +
                                   idCardNum.Substring(12, 2);
                    if (!CheckValidCode(idCardNum.Substring(0, 17), idCardNum[17]))
                        valid = false;
                    else if (!CheckACode(idCardNum.Substring(0, 2)))
                        valid = false;
                    else if (age == 0)
                        valid = false;
                    else
                        valid = true;
                    user.IsValid = valid;
                    if (valid)
                    {
                        int g = Convert.ToInt32(idCardNum.Substring(14, 3));
                        if (g % 2 == 0)
                        {
                            user.Gender = 1;
                        }
                        else
                        {
                            user.Gender = 0;
                        }
                        user.Age = age;
                        user.IsAdult = age >= AuditAge;
                        user.BirthDay = Convert.ToDateTime(birthday);
                    }
                }
                else if (idCardNum.Length == 15)
                {
                    var age = GetAge("19" + idCardNum.Substring(6, 2));
                    var birthday = "19" + idCardNum.Substring(6, 2) + "-" + idCardNum.Substring(8, 2) + "-" +
                                   idCardNum.Substring(10, 2);
                    if (!CheckACode(idCardNum.Substring(0, 2)))
                        valid = false;
                    else if (age == 0)
                        valid = false;
                    else
                        valid = true;
                    user.IsValid = valid;
                    if (valid)
                    {
                        int g = Convert.ToInt32(idCardNum.Substring(12, 3));
                        if (g % 2 == 0)
                        {
                            user.Gender = 1;
                        }
                        else
                        {
                            user.Gender = 0;
                        }
                        user.Age = age;
                        user.IsAdult = age >= AuditAge;
                        user.BirthDay = Convert.ToDateTime(birthday);
                    }
                }
                else
                {
                    user.IsValid = false;
                }
            }
            catch (Exception ex)
            {
                user.IsValid = false;
            }
        }

        static bool CheckValidCode(string input17, char last)//检查最后一位校验码
        {
            if (last == CheckValidCode(input17))
                return true;
            return false;
        }
        static char CheckValidCode(string input17)//检查最后一位校验码
        {
            int sum = 0, cur;
            for (int i = 0; i < 17; i++)
            {
                cur = Convert.ToInt32(input17[i]) - 48;
                sum += cur * Weight[i];
            }
            return VCode[(sum % 11)];
        }
        static int GetAge(string input4)//算出年龄
        {
            try
            {
                return Convert.ToInt32(DateTime.Now.Year) - Convert.ToInt32(input4);
            }
            catch { return 0; }
        }
        static bool CheckACode(string input2)//检查地区码
        {
            if (Address.IndexOf(input2) != -1)
                return true;
            return false;
        }

    }

    public class IdCardUserInfo
    {
        /// <summary>
        /// 身份证号码
        /// </summary>
        public string IdCardNum { get; set; }
        /// <summary>
        /// 性别 0男1女
        /// </summary>
        public int Gender { get; set; }
        /// <summary>
        /// 生日
        /// </summary>
        public DateTime BirthDay { get; set; }
        /// <summary>
        /// 年龄
        /// </summary>
        public int Age { get; set; }

        /// <summary>
        /// 身份证是否合法
        /// </summary>
        public bool IsValid { get; set; }
        /// <summary>
        /// 是否是成年人
        /// </summary>
        public bool IsAdult { get; set; }
    }

  

时间: 2024-08-25 00:52:18

身份证验证并计算的相关文章

身份证验证(java)

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Hashtable; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern; p

java身份证验证

import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Hashtable; import java.util.Scanner; import java.util.regex.Matcher; import java.util.regex.Pattern;  

Java、Android身份证验证工具 支持15/18位、地区、生日和校验码验证

首先科普一下身份证的一些知识(知道的勿喷) 1-2 位:代表升级行政区代码 3-4 位:代表地级行政区划分代码 5-6 位:代表县区行政区分代码 7-14 位:代表出生年.月.日,例如:19900101 15-17 位:代表 顺序码,同一地区同年.同月.同日出生人的编号,奇数是男性,偶数是女性 18 位:代表校验码,如果是0-9则用0-9表示,如果是10则用X(罗马数字10)表示 注:另外有些15位的身份证号码,年份使用2位数字表示的,并且没有最后一位校验码:从1999年10月1日起,全国实行公

HDU 17新生赛 身份证验证【模拟】

身份证验证 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1611    Accepted Submission(s): 201 Problem Description 大学时代的小Q,是一个志向远大的热血青年,欲致力于国家网络建设.长年泡在电脑密集的地区潜心钻研以互联网为传输媒介,以个人计算机为终端,旨在实现休闲.交流.获得虚拟成就的

C#实现中国身份证验证问题

C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准... 今天写的 C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准... 理论部分: 15位身份证号码=6位地区代码+6位生日+3位编号 18位身份证号码=6位地区代码+8位生日+3位编号+1位检验码 各省市地区国家代码前两位代码是: 北京 11 吉林 22 福建 35 广东 44 云南 53 天津 12 黑龙江 23 江西 36 广西 45 西藏 54 河北 13 上海 31 山东 37

基于JS的身份证验证(完整版)

var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 加权因子 var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]; // 身份证验证位值.10代表X function checkIdcard(idCard) { idCard = trim(idCard);//去掉字符串头尾空格 if (idCard.length == 15) { return is

Jsp注册页面身份证验证

<!--身份证验证 --><script type="text/javascript">function isCardNo(Idcardnumber) { alert(11111); // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var id=$("#Idcardnumber").val();//var id=$("#Idcardnumber")是获取In

java 18位身份证验证小组件idchecker

原文:java 18位身份证验证小组件idchecker 源代码下载地址:http://www.zuidaima.com/share/1550463500012544.htm 代码运行结果: 其它调用方法: package com.zuidaima.idchecker.test; import cn.idchecker.check.Checker; /** * idchecker测试 * @author http://www.zuidaima.com * */ public class Test

手机验证 和身份证验证

$("#memberLevelForm").validate({ rules: { "phone":{ required : true, isMobile : true } }, submitHandler: function() {}, messages: { "phone":{ required :"请输入手机号!", isMoblie : true } } }); }); //手机号码验证 jQuery.validato