C#验证身份证的函数
程序员文章站
2023-01-22 13:10:35
这段c#代码主要是验证身份证的开头和身份证的格式和长度是否正确,没有按照身份证的编码规则进行严格验证
///
/// 验...
这段c#代码主要是验证身份证的开头和身份证的格式和长度是否正确,没有按照身份证的编码规则进行严格验证
/// <summary> /// 验证身份证是否合法 /// </summary> /// <param name="idcard">要验证的身份证</param> public static bool isidcard(string idcard) { //如果为空,认为验证合格 if (isnullorempty(idcard)) { return true; } //清除要验证字符串中的空格 idcard = idcard.trim(); //模式字符串 stringbuilder pattern = new stringbuilder(); pattern.append(@"^(11|12|13|14|15|21|22|23|31|32|33|34|35|36|37|41|42|43|44|45|46|"); pattern.append(@"50|51|52|53|54|61|62|63|64|65|71|81|82|91)"); pattern.append(@"(\d{13}|\d{15}[\dx])$"); //验证 return regexhelper.ismatch(idcard, pattern.tostring()); }
更为复杂些的验证方法:
private string checkcidinfo(string cid) { string[] acity = new string[]{null,null,null,null,null,null,null,null,null,null,null,"北京","天津","河北","山西","内蒙古",null,null,null,null,null,"辽宁","吉林","黑龙江",null,null,null,null,null,null,null,"上海","江苏","浙江","安微","福建","江西","山东",null,null,null,"河南","湖北","湖南","广东","广西","海南",null,null,null,"重庆","四川","贵州","云南","*",null,null,null,null,null,null,"陕西","甘肃","青海","宁夏","*",null,null,null,null,null,"*",null,null,null,null,null,null,null,null,null,"香港","澳门",null,null,null,null,null,null,null,null,"国外"}; double isum=0; string info=""; system.text.regularexpressions.regex rg = new system.text.regularexpressions.regex(@"^\d{17}(\d|x)$"); system.text.regularexpressions.match mc = rg.match(cid); if(!mc.success) { return ""; } cid = cid.tolower(); cid = cid.replace("x","a"); if(acity[int.parse(cid.substring(0,2))]==null) { return "非法地区"; } try { datetime.parse(cid.substring(6,4)+"-"+cid.substring(10,2)+"-"+cid.substring(12,2)); } catch { return "非法生日"; } for(int i=17;i>=0;i--) { isum +=(system.math.pow(2,i)%11)*int.parse(cid[17-i].tostring(),system.globalization.numberstyles.hexnumber); } if(isum%11!=1) return("非法证号"); return(acity[int.parse(cid.substring(0,2))]+","+cid.substring(6,4)+"-"+cid.substring(10,2)+"-"+cid.substring(12,2)+","+(int.parse(cid.substring(16,1))%2==1¡"男":"女")); } 调用测试: response.write(checkcidinfo("340524198002300019")); response.write(checkcidinfo("34052419800101001x"));
方法三:
/// <summary> /// 身份证验证 /// </summary> /// <param name="id">身份证号</param> /// <returns></returns> public bool checkidcard(string id) { if (id.length == 18) { bool check = checkidcard18(id); return check; } else if (id.length == 15) { bool check = checkidcard15(id); return check; } else { return false; } } /// <summary> /// 18位身份证验证 /// </summary> /// <param name="id">身份证号</param> /// <returns></returns> private bool checkidcard18(string id) { long n = 0; if (long.tryparse(id.remove(17), out n) == false || n < math.pow(10, 16) || long.tryparse(id.replace('x', '0').replace('x', '0'), out n) == false) { return false;//数字验证 } string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91"; if (address.indexof(id.remove(2)) == -1) { return false;//省份验证 } string birth = id.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 = id.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] != id.substring(17, 1).tolower()) { return false;//校验码验证 } return true;//符合gb11643-1999标准 } /// <summary> /// 15位身份证验证 /// </summary> /// <param name="id">身份证号</param> /// <returns></returns> private bool checkidcard15(string id) { long n = 0; if (long.tryparse(id, out n) == false || n < math.pow(10, 14)) { return false;//数字验证 } string address = "11x22x35x44x53x12x23x36x45x54x13x31x37x46x61x14x32x41x50x62x15x33x42x51x63x21x34x43x52x64x65x71x81x82x91"; if (address.indexof(id.remove(2)) == -1) { return false;//省份验证 } string birth = id.substring(6, 6).insert(4, "-").insert(2, "-"); datetime time = new datetime(); if (datetime.tryparse(birth, out time) == false) { return false;//生日验证 } return true;//符合15位身份证标准 }
以上所述就是本文的全部内容了,希望大家能够喜欢。
上一篇: 超多看点!Windows 10 20H1新版特性盘点:趋于完美
下一篇: 经络养生2种方法养血又益气