校验码是识别一个身份证号码是否真实存在的重要的依据。那我们要如何通过校验码来判断一个身份证号码是否真实的呢?

校验码如何判断身份证号码真伪呢?我们来看看具体计划过程。

第一步:将身份证号码的第1位数字与7相乘;将身份证号码的第2位数字与9相乘;将身份证号码的第3位数字与10相乘;将身份证号码的第4位数字与5相乘;将身份证号码的第5位数字与8相乘;将身份证号码的第6位数字与4相乘;将身份证号码的第7位数字与2相乘;将身份证号码的第8位数字与1相乘;将身份证号码的第9位数字与6相乘;将身份证号码的第10位数字与3相乘;将身份证号码的第11位数字与7相乘;将身份证号码的第12位数字与9相乘;将身份证号码的第13位数字与10相乘;将身份证号码的第14位数字与5相乘;将身份证号码的第15位数字与8相乘;将身份证号码的第16位数字与4相乘;将身份证号码的第17位数字与2相乘。

第二步:将第一步身份证号码1~17位相乘的结果求和,全部加起来。

第三步:用第二步计算出来的结果除以11,这样就会出现余数为0,余数为1,余数为2,余数为3,余数为4,余数为5,余数为6,余数为7,余数为8,余数为9,余数为10共11种可能性。

第四步:如果余数为0,那对应的最后一位身份证的号码为1;如果余数为1,那对应的最后一位身份证的号码为0;如果余数为2,那对应的最后一位身份证的号码为X;如果余数为3,那对应的最后一位身份证的号码为9;如果余数为4,那对应的最后一位身份证的号码为8;如果余数为5,那对应的最后一位身份证的号码为7;如果余数为6,那对应的最后一位身份证的号码为6;如果余数为7,那对应的最后一位身份证的号码为5;如果余数为8,那对应的最后一位身份证的号码为4;如果余数为9,那对应的最后一位身份证的号码为3;如果余数为10,那对应的最后一位身份证的号码为2。

比如: 身份证号码 432831196411150810 这个身份证是否是有效身份证号码呢?请看校验码分析。

校验码是0,身份证号码 432831196411150810中最后一位是0,所以这是一个有效的身份证号码。

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

namespace shenfenzhengCheck
{
    /// <summary>  

    /// 验证身份证号码类  

    /// </summary>  

    public class IDCardValidation

    {

        /// <summary>  

        /// 验证身份证合理性  

        /// </summary>  

        /// <param name="Id"></param>  

        /// <returns></returns>  

        public bool CheckIDCard(string idNumber)

        {

            if (idNumber.Length == 18)

            {

                bool check = CheckIDCard18(idNumber);

                return check;

            }

            else if (idNumber.Length == 15)

            {

                bool check = CheckIDCard15(idNumber);

                return check;

            }

            else

            {

                return false;

            }

        }





        /// <summary>  

        /// 18位身份证号码验证  

        /// </summary>  

        private bool CheckIDCard18(string idNumber)

        {

            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标准  

        }





        /// <summary>  

        /// 16位身份证号码验证  

        /// </summary>  

        private bool CheckIDCard15(string idNumber)

        {

            long n = 0;

            if (long.TryParse(idNumber, out n) == false || n < Math.Pow(10, 14))

            {

                return false;//数字验证  

            }

            string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";

            if (address.IndexOf(idNumber.Remove(2)) == -1)

            {

                return false;//省份验证  

            }

            string birth = idNumber.Substring(6, 6).Insert(4, "-").Insert(2, "-");

            DateTime time = new DateTime();

            if (DateTime.TryParse(birth, out time) == false)

            {

                return false;//生日验证  

            }

            return true;

        }

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

namespace shenfenzhengCheck
{
    class Program
    {
        static void Main(string[] args)
        {
            IDCardValidation card = new IDCardValidation();
            //从网上身份证大全找来的,验证结果为true  

            bool result = card.CheckIDCard("110101199403078194");
            Console.WriteLine(result.ToString());

            //随便编的,验证结果为false  

            //result = card.CheckIDCard("612427199901281214");
            //Console.WriteLine(result.ToString());
            Console.ReadLine();
        }
    }
}

rules校验身份证号_System