C#实现身份证号码验证的方法
本文实例讲述了C#实现身份证号码验证的方法。分享给大家供大家参考。具体实现方法如下:
随着现在互联网的发展,越来越多的注册用户的地方都用到了身份证,那么对于输入的身份证如何验证呢?看下面的代码,其实很简单。
主要注意的是,目前的身份证分为16和18位,然后分别验证校验位,省份,生日即可。
主要类如下:
///<summary>
///验证身份证号码类
///</summary>
publicclassIDCardValidation
{
///<summary>
///验证身份证合理性
///</summary>
///<paramname="Id"></param>
///<returns></returns>
publicboolCheckIDCard(stringidNumber)
{
if(idNumber.Length==18)
{
boolcheck=CheckIDCard18(idNumber);
returncheck;
}
elseif(idNumber.Length==15)
{
boolcheck=CheckIDCard15(idNumber);
returncheck;
}
else
{
returnfalse;
}
}
///<summary>
///18位身份证号码验证
///</summary>
privateboolCheckIDCard18(stringidNumber)
{
longn=0;
if(long.TryParse(idNumber.Remove(17),outn)==false
||n<Math.Pow(10,16)||long.TryParse(idNumber.Replace('x','0').Replace('X','0'),outn)==false)
{
returnfalse;//数字验证
}
stringaddress="11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
if(address.IndexOf(idNumber.Remove(2))==-1)
{
returnfalse;//省份验证
}
stringbirth=idNumber.Substring(6,8).Insert(6,"-").Insert(4,"-");
DateTimetime=newDateTime();
if(DateTime.TryParse(birth,outtime)==false)
{
returnfalse;//生日验证
}
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();
intsum=0;
for(inti=0;i<17;i++)
{
sum+=int.Parse(Wi[i])*int.Parse(Ai[i].ToString());
}
inty=-1;
Math.DivRem(sum,11,outy);
if(arrVarifyCode[y]!=idNumber.Substring(17,1).ToLower())
{
returnfalse;//校验码验证
}
returntrue;//符合GB11643-1999标准
}
///<summary>
///16位身份证号码验证
///</summary>
privateboolCheckIDCard15(stringidNumber)
{
longn=0;
if(long.TryParse(idNumber,outn)==false||n<Math.Pow(10,14))
{
returnfalse;//数字验证
}
stringaddress="11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";
if(address.IndexOf(idNumber.Remove(2))==-1)
{
returnfalse;//省份验证
}
stringbirth=idNumber.Substring(6,6).Insert(4,"-").Insert(2,"-");
DateTimetime=newDateTime();
if(DateTime.TryParse(birth,outtime)==false)
{
returnfalse;//生日验证
}
returntrue;
}
}测试调用:
IDCardValidationcard=newIDCardValidation();
//从网上身份证大全找来的,验证结果为true boolresult=card.CheckIDCard("522324197508045617");
Console.WriteLine(result.ToString()); //随便编的,验证结果为false result=card.CheckIDCard("612427199901281214");
Console.WriteLine(result.ToString());
Console.ReadLine();