验证身份证合法性

coding

///</summary>

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

///<returns></returns>

publicbool CheckIDCard(string idNumber)

{

if (idNumber.Length == 18)

{

bool check = CheckIDCard18(idNumber);

return check;

}

else

{

returnfalse;

}

}

///<summary>

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

///</summary>

///<param name="idNumber"></param>

///<returns></returns>

publicbool 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)

{

returnfalse;//数字验证

}

string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91";

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

{

returnfalse;//省份验证

}

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

DateTime time = new DateTime();

if (DateTime.TryParse(birth, out time) == 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();

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);

Console.WriteLine("Y的理论值: " + y);

if (arrVarifyCode[y] != idNumber.Substring(17, 1).ToLower())

{

returnfalse;//校验码验证

}

returntrue;//符合GB11643-1999标准

}

 引用:https://www.cnblogs.com/pelli/p/6112996.html

// 函数参数必须是字符串,因为二代身份证号码是十八位,而在javascript中,十八位的数值会超出计算范围,造成不精确的结果,导致最后两位和计算的值不一致,从而该函数出现错误。

// 详情查看javascript的数值范围

function IdCardValidate(idcode) {

// 加权因子

var weight_factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];

// 校验码

var check_code = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'];

var code = idcode + "";

var last = idcode[17];//最后一个

var seventeen = code.substring(0, 17);

// ISO 7064:1983.MOD 11-2

// 判断最后一位校验码是否正确

var arr = seventeen.split("");

var len = arr.length;

var num = 0;

for (var i = 0; i < len; i++) {

num = num + arr[i] * weight_factor[i];

}

// 获取余数

var resisue = num % 11;

var last_no = check_code[resisue];

// 格式的正则

// 正则思路

/*

第一位不可能是0

第二位到第六位可以是0-9

第七位到第十位是年份,所以七八位为19或者20

十一位和十二位是月份,这两位是01-12之间的数值

十三位和十四位是日期,是从01-31之间的数值

十五,十六,十七都是数字0-9

十八位可能是数字0-9,也可能是X

*/

var idcard_patter = /^[1-9][0-9]{5}([1][9][0-9]{2}|[2][0][0|1][0-9])([0][1-9]|[1][0|1|2])([0][1-9]|[1|2][0-9]|[3][0|1])[0-9]{3}([0-9]|[X])$/;

// 判断格式是否正确

var format = idcard_patter.test(idcode);

// 返回验证结果,校验码和格式同时正确才算是合法的身份证号码

return last === last_no && format ;

}

以上是 验证身份证合法性 的全部内容, 来源链接: utcz.com/z/508840.html

回到顶部