ASP.Net: EshineASPNet教程-身份证校验与正则
来源:互联网 发布:网络综合布线图 编辑:程序博客网 时间:2024/05/22 08:59
完整教程链接:ASP.Net: EshineASPNet-基于ASP.Net敏捷开发开源框架
很多应用都会涉及到用户身份证的输入,严格的程序并不会接受用户随便输入一串字符,而应该检查身份证是否合法,这里并不是说检查这个身份证号是否存在,而是说身份证号是否符合规则。身份证号里面包含很多信息,大多数人知道的是出生日期,但其实18位字符里面每一位都是有讲究的,身份证校验只是个小话题,主要是温习一下正则在JS和C#里面的使用,先上代码。
<script> var aCity = { 11: "北京", 12: "天津", 13: "河北", 14: "山西", 15: "内蒙古", 21: "辽宁", 22: "吉林", 23: "黑龙江 ", 31: "上海", 32: "江苏", 33: "浙江", 34: "安徽", 35: "福建", 36: "江西", 37: "山东", 41: "河南", 42: "湖北 ", 43: "湖南", 44: "广东", 45: "广西", 46: "海南", 50: "重庆", 51: "四川", 52: "贵州", 53: "云南", 54: "西藏 ", 61: "陕西", 62: "甘肃", 63: "青海", 64: "宁夏", 65: "新疆", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外 " } var t3 = document.getElementById("<%=TextBox3.ClientID%>"); function cidInfo(sId) { var iSum = 0 var info = "" if (!/^\d{17}(\d|X|x)$/.test(sId)) { alert('"请输入完整身份证号码!'); TextBox3.focus(); return; } sId = sId.replace(/x$/i, "a"); if (aCity[parseInt(sId.substr(0, 2))] == null) { alert('Error:非法地区'); TextBox3.focus(); return; } sBirthday = sId.substr(6, 4) + "-" + Number(sId.substr(10, 2)) + "-" + Number(sId.substr(12, 2)); var d = new Date(sBirthday.replace(/-/g, "/")) if (sBirthday != (d.getFullYear() + "-" + (d.getMonth() + 1) + "-" + d.getDate())) { alert('Error:非法生日'); TextBox3.focus(); return; } for (var i = 17; i >= 0; i--) iSum += (Math.pow(2, i) % 11) * parseInt(sId.charAt(17 - i), 11) if (iSum % 11 != 1) { alert('Error:非法证号'); TextBox3.focus(); return; } }</script>
身份证号码由18位数字组成,
前1、2位数字表示:所在省份的代码;
第3、4位数字表示:所在城市的代码;
第5、6位数字表示:所在区县的代码;
第7~14位数字表示:出生年、月、日;
第15、16位数字表示:所在地的派出所的代码;
第17位表示性别:奇数表示男性,偶数表示女性;
第18位是校检码:校检码可以是0~9的数字,有时也用x表示。
上面那段JS就是逐段检验身份证号的某几位是否合法,懒人也可以不管具体的直接用就是,这里是在身份证号不正确的时候让文本持续获得焦点,直到输入的身份证号正确为止,也可以把focus()去掉,把return改成return false;具体根据需求来。
JS的正则是包含在一对斜杠(/)之间的字符,如/\d{18}/,这个等价于new RegExp(“\d{18}”)。
其他六个属性:
L:字母;
M:标记符号(一般不会单独出现);
Z:分隔符(比如空格、换行等);
S:符号(比如数学符号、货币符号等);
N:数字(比如阿拉伯数字、罗马数字等);
C:其他字符。
*注:此语法部分语言不支持,例:javascript。 < > 匹配词(word)的开始(<)和结束(>)。例如正则表达式能够匹配字符串”for the wise”中的”the”,但是不能匹配字符串”otherwise”中的”the”。注意:这个元字符不是所有的软件都支持的。 ( ) 将( 和 ) 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。 将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him + 匹配1或多个正好在它之前的那个字符。例如正则表达式9+匹配9、99、999等。注意:这个元字符不是所有的软件都支持的。 ? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。 {i} {i,j} 匹配指定数目的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]{3} 能够匹配字符”A”后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。而正则表达式[0-9]{4,6} 匹配连续的任意4个、5个或者6个数字
public static 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; Regex rg = new Regex(@"^\d{17}(\d|x)$"); Match mc = rg.Match(cid); if (!mc.Success) { return "必须为18位数字或x结尾"; } 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 += (Math.Pow(2, i) % 11) * int.Parse(cid[17 - i].ToString(), System.Globalization.NumberStyles.HexNumber); } if (iSum % 11 != 1) return ("非法证号"); return ("合法身份证号"); }
上面是C#版的身份证校验代码。
本教程
JS代码参考EshineASPNet\Web\fetchpassword2.aspx
C#代码参考EshineASPNet\Bll\PublicClass.cs
完整教程链接:ASP.Net: EshineASPNet-基于ASP.Net敏捷开发开源框架
- ASP.Net: EshineASPNet教程-身份证校验与正则
- ASP.Net: EshineASPNet教程-多语言与单一登录
- ASP.Net: EshineASPNet教程-EXCEL导入与导出
- ASP.Net: EshineASPNet教程-公众号开发与框架
- ASP.Net: EshineASPNet教程-商店门店地图展示
- ASP.Net: EshineASPNet教程-根据模板发送邮件
- ASP.Net: EshineASPNet教程-支付机构支付模块
- ASP.Net: EshineASPNet教程-自动生成代码模块
- 身份证校验算法与ASP程序
- 身份证校验算法与ASP程序
- 正则校验之身份证
- js,身份证校验(正则表达式)
- js,身份证校验(正则表达式)
- 身份证、银行卡 js正则校验
- 日期校验、身份证校验、电话校验的正则表达式方法
- asp.net 身份证验证
- ASP.Net: EshineASPNet-基于ASP.Net敏捷开发开源框架
- iOS之身份证的正则校验
- C++ Maps & MultiMaps
- CentOS 5/6/7网卡绑定方案
- Spring Boot系列教程六:日志输出配置log4j2
- ACM测试---5-6 帅到没朋友 (20分)
- 命令模式(python)
- ASP.Net: EshineASPNet教程-身份证校验与正则
- 【ARM-Linux开发】Rico Board DIY系列实验教程 Day 2——搭建Boa服务器
- C++ Sets & MultiSets
- android连接小票打印机,打印小票数据的两种模式
- HSV(HSB) - HSI(HSl)
- 组合模式(python)
- C++ Stacks(堆栈)
- 1.1 用两个栈实现一个队列
- 3种方式来永久和安全地删除Linux中的“文件和目录”