C implementation of id number verification method

  • 2020-12-09 01:00:08
  • OfStack

This article illustrates the method of C# to realize id number verification. Share to everybody for everybody reference. Specific implementation methods are as follows:

With the development of the Internet, more and more registered users have used the ID card, so how to verify the input id card? Look at the code below. It's actually quite simple.

The main thing to note is that the current IDENTITY card is divided into 16 and 18 bits, and then verify the verification bit, province, birthday can be.

The main categories are as follows:

/// <summary>  
/// Verify id number class  
/// </summary> 
public class IDCardValidation 

        /// <summary> 
        /// Verify the rationality of ID card  
        /// </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 Bit ID number verification  
        /// </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;// Digital authentication  
            } 
            string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91"; 
            if (address.IndexOf(idNumber.Remove(2)) == -1) 
            { 
                return false;// Province of validation  
            } 
            string birth = idNumber.Substring(6, 8).Insert(6, "-").Insert(4, "-"); 
            DateTime time = new DateTime(); 
            if (DateTime.TryParse(birth, out time) == false) 
            { 
                return false;// Birthday to verify  
            } 
            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;// Check code verification  
            } 
            return true;// Conform to the GB11643-1999 standard  
        } 
 
 
        /// <summary> 
        /// 16 Bit ID number verification  
        /// </summary> 
        private bool CheckIDCard15(string idNumber) 
        { 
            long n = 0; 
            if (long.TryParse(idNumber, out n) == false || n < Math.Pow(10, 14)) 
            { 
                return false;// Digital authentication  
            } 
            string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91"; 
            if (address.IndexOf(idNumber.Remove(2)) == -1) 
            { 
                return false;// Province of validation  
            } 
            string birth = idNumber.Substring(6, 6).Insert(4, "-").Insert(2, "-"); 
            DateTime time = new DateTime(); 
            if (DateTime.TryParse(birth, out time) == false) 
            { 
                return false;// Birthday to verify  
            } 
            return true; 
        }  
}

Test call:
IDCardValidation card = new IDCardValidation(); 
// From the online identity card daqo to find, verification results for true  
bool result = card.CheckIDCard("522324197508045617");  Console.WriteLine(result.ToString()); 
// I just made it up, and the result is zero false 
result = card.CheckIDCard("612427199901281214");  Console.WriteLine(result.ToString());  Console.ReadLine();

Hopefully this article has helped you with your C# programming.


Related articles: