用正则表达式进行身份证验证
开发工具与关键技术:Visual Studio ASP.NET MVC
作者:刘剑鸿
撰写时间:2019年5月02日 星期四
用正则表达式进行身份证验证
正则表达式又称规则表达式,它的英文名字为Regular Expression。而代码中常简写为regex、regexp或RE。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。简单的说就是正则表达式是用于进行文本匹配的工具。
比如说:each、eat、eager、dear 在这个字符串中匹配出eat,就应该这样书写正则表达式:\beat\b, \b是正则表达式规定的一个特殊代码,我们把它叫做元字符,单词的开头或结尾,也就是单词的分界处,它只匹配一个位置。其实不仅
\b一个元字符,还有好几个我们常用的:
代码 说明
. 匹配除换行符以外的任意字符
\w 匹配数字或字母或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
看起来是有好多东西要记,不过用多了几自然熟了。不仅要熟悉元字符,还有常用的限定符
代码 说明
* 重复零次或更多次+ 重复一次或更多次? 重复零次或一次{n} 重复n次{n,} 重复n次或更多次{n,m} 重复n到m次
还有一个挺重要的反义字符,
代码/语法 说明\W 匹配任意不是字母,数字,下划线,汉字的字符\S 匹配任意不是空白符的字符\D 匹配任意非数字的字符\B 匹配不是单词开头或结束的位置[^x] 匹配除了x以外的任意字符
正则表达式还有许多重要的匹配字符,现在已经把验证身份证所用到的字符都列出来。下面是 jquery验证身份证号方法
function idCardNo(value) {var area = { 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: "xinjiang", 71: "台湾", 81: "香港", 82: "澳门", 91: "国外" }var idcard, Y, JYM;var idcard = value;var S, M;var idcard_array = new Array();idcard_array = idcard.split("");if (area[parseInt(idcard.substr(0, 2))] == null) return false;switch (idcard.length) {case 15:if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0 ||((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard.substr(6,
2)) + 1900) % 4 == 0)) {ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/; //测试出生日期的合法性}else {ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/; //测试出生日期的合法性}if (ereg.test(idcard))//return Errors[0];var res = true;else//return Errors[2];var res = false;return res;break;case 18:if (parseInt(idcard.substr(6, 4)) % 4 == 0 ||(parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard.substr(6,
4)) % 4 == 0)) {ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/; //闰年出生日期的合法性正则表达式}else {ereg = /^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/; //平年出生日期的合法性正则表达式}if (ereg.test(idcard)) {S = (parseInt(idcard_array[0])+ parseInt(idcard_array[10])) * 7 + (parseInt(idcard_array[1]) +
parseInt(idcard_array[11])) * 9 + (parseInt(idcard_array[2]) + parseInt(idcard_array[12]))* 10 + (parseInt(idcard_array[3]) + parseInt(idcard_array[13])) * 5 +(parseInt(idcard_array[4]) + parseInt(idcard_array[14])) * 8 +(parseInt(idcard_array[5]) + parseInt(idcard_array[15])) * 4 +
(parseInt(idcard_array[6]) + parseInt(idcard_array[16])) * 2 +
parseInt(idcard_array[7]) * 1 + parseInt(idcard_array[8]) * 6 +
parseInt(idcard_array[9]) * 3;Y = S % 11;M = "F";JYM = "10X98765432";M = JYM.substr(Y, 1);if (M == idcard_array[17])//return Errors[0];var res = true;else//return Errors[3];var res = false;}else//return Errors[2];res = false;return res;break;default:res = false;return res;break;};
}
上面用到 switch语句,因为以前的身份证是15位的,而现在都是18位。这些都是封装好的方法。需要时就直接复制过去用就行。下面是将正则表达式验证身份证的合法性的验证:
(本截图来自RegexBuddy)
图中下面身份证号码的金黄色背景表示匹配正确!若输入一个不合法的身份证号码则:
(本截图来自RegexBuddy)
用正则表达式进行身份证验证相关推荐
- 正则表达式实现身份证信息验证
一.任务描述 西普工程师想了解正则表达式,为达到更好的对正则更深入的认知,打算利用正则表达式实现身份证信息的验证的实验,结合Python的基础知识实现并填写工作报告. 二.任务目标 1)熟悉Pyt ...
- 【转】ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证)...
[转]ASP.NET验证控件详解(非空验证,比较验证,范围验证,正则表达式,自定义验证) ASP.NET验证控件详解 现在ASP.NET,你不但可以轻松的实现对用户输入的验证,而且,还可以选择验证在服 ...
- 日期,手机号码正则表达式校验,身份证校验等常用工具
日期类工具 DataUtil public class DateUtils {/*** 北京时区*/public static final ZoneOffset BJ_ZONE = ZoneOffse ...
- 正则表达式之数字验证
博客地址:http://www.cnblogs.com/zhuzhenwei918/p/6202932.html 正则表达式之数字验证 第一部分:数值验证 1.验证只包含数字.指定长度(N)的字符串 ...
- 使用正则表达式进行身份证号匹配
正则表达式匹配身份证号分为:18位和15位 校验 18位 身份证 地区: ([1-6][1-9]|50)\d{4} // 补充重庆地区50 年的前两位: (18|19|20) 1800-2399 年的 ...
- 正则表达式-注册表验证
正则表达式-注册表验证 正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串& ...
- JS常用正则表达式表单验证代码大汇总
正则表达式使用详解 简介 简单的说,正则表达式是一种可以用于模式匹配和替换的强有力的工具.其作用如下: 测试字符串的某个模式.例如,可以对一个输入字符串进行测试,看在该字符串是否存在一个电话号码模式或 ...
- 微信小程序中,使用正则表达式,快速验证是否是数字(附正则表)
微信小程序中,使用正则表达式,快速验证是否是数字(附正则表) 1.示例 if (this.data.goodsNum == '' || this.data.goodsNum == undefined) ...
- 正则表达式截取身份证号码加密的方法
下面一段简单的代码给大家介绍正则表达式截取身份证号码加密的方法,具体代码如下所示: 直接上代码: 1 2 3 4 var idCard = '420119188404098978X' ; // 保留前 ...
- 正则表达式的各种验证方法
正则表达式的各种验证方法 好多种方式.可以用正则表达式,可以用其他过滤方式. using System.Text.RegularExpressions; /// <summary>/// ...
最新文章
- java reference_java中的4种reference的差别和使用场景(含理论、代码和执行结果)...
- matlab清理程序onCleanup
- Android Open Accessory (AOA)
- 进销存中多计量单位解决方法
- java异常 说服力_异常常见面试题目
- AgileConfig 1.6.0 发布 - 支持服务注册与发现
- elif else if oracle_关于Oracle if elsif else
- 30个基于jQuery的日期时间选择插件
- 提权命令_利用Linux文本操作命令ed进行提权
- 异常处理:try-catch-finally与throws的区别及使用情况
- vSAN Health Service-物理磁盘运行状况-物理磁盘运行状况检索问题(2149291)
- 2.1MAC协议概述
- chrom浏览器flash_flash插件
- Python爬虫进行Web数据挖掘总结和分析 这是我见过最牛逼的教程
- 致远OA单点登陆到第三方系统(零代码实现)
- phpspider框架的使用
- MYSQL服务器登录和权限设置
- soul显示服务器错误,Soul接入一个Http服务
- javaweb JSP JAVA 电影院在线订票系统(电影购票系统 电影售票 电影票预订系统)
- 简单实用BOM管理系统,树形结构,一目了然BOM管理系统,集成ERP的BOM管理系统 BOM集成SAP 快速上线BOM管理系统 目视化BOM管理系统