正则实现二代身份证号码验证详解[通俗易懂]

正则实现二代身份证号码验证详解[通俗易懂]最近项目需要对身份证进行比较合理的筛选,并不想用到第三方接口,所以写了个方法:包括支持身份证号合法性验证,支持18位身份证号,支持地址编码、出生日期、校验位验证.基本上这样就可以了.IdCodeValid:function(code){ //身份证号合法性验证 //支持15位和18位身份证号 //支持地址编码、出生日期、校验位验证 varcity={11:”北京”,12:”…

大家好,又见面了,我是你们的朋友全栈君。

最近项目需要对身份证进行比较合理的筛选,并不想用到第三方接口,所以写了个方法:

包括支持身份证号合法性验证, 支持18位身份证号,支持地址编码、出生日期、校验位验证. 基本上这样就可以了.

IdCodeValid:function(code){
	//身份证号合法性验证
	//支持15位和18位身份证号
	//支持地址编码、出生日期、校验位验证
	var city={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 row={
		'pass':true,
		'msg':'验证成功'
	};
	if(!code || !/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/.test(code)){
		row={
			'pass':false,
			'msg':'身份证号格式错误'
		};
	}else if(!city[code.substr(0,2)]){
		row={
			'pass':false,
			'msg':'身份证号地址编码错误'
		};
	}else{
		//18位身份证需要验证最后一位校验位
		if(code.length == 18){
			code = code.split('');
			//∑(ai×Wi)(mod 11)
			//加权因子
			var factor = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ];
			//校验位
			var parity = [ 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 ];
			var sum = 0;
			var ai = 0;
			var wi = 0;
			for (var i = 0; i < 17; i++)
			{
				ai = code[i];
				wi = factor[i];
				sum += ai * wi;
			}
			if(parity[sum % 11] != code[17].toUpperCase()){
				row={
					'pass':false,
					'msg':'身份证号校验位错误'
				};
			}
		}
	}
	return row;
}

IdCodeValid('xxx');

 

正则表达式:
出生日期1800-2099 (18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])
身份证正则表达式 /^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/
位校验规则 6位地址编码+8位出生日期+3位顺序号+1位校验位

 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153627.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • TinyProxy:移动联通电信各个卡定向免流方法教程[通俗易懂]

    下载地址:https://www.lanzoui.com/i0Tsigfiv7c开始以电信星卡为例:打开软件右上角设置下高级模式然后返回复制下这模式【百度直连】免歪卡、星卡、小歪卡、小抖卡、大圣卡、百度系可免listen_port=65080; daemon=on; worker_proc=0; uid=3004; http_ip=112.80.255.21; http_port=443; http_del=”X-Online-Host,Host”..

    2022年4月15日
    396
  • split 方法_subsequence和substring的区别

    split 方法_subsequence和substring的区别1,split方法split()方法用于把一个字符串分割成字符串数组。例如:数据中现在有这样一个结果128b8f730592cc8db33ea52985127d44,44bee6555822d8321d2d1a2c1ac3b2cf,b2f939f26e512934e165f3e784cc74ca,我需要把这个字符串变成数组 console.log(res.result.produc…

    2022年9月25日
    5
  • 【Python】python面试题

    【Python】python面试题一些Python面试题注:本面试题来源于网络,部分内容摘自http://www.cnblogs.com/goodhacker/p/3366618.html1.(1)python下多线程的限制以及

    2022年7月5日
    25
  • pytest 执行用例_测试用例执行结果有哪些

    pytest 执行用例_测试用例执行结果有哪些前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

    2022年7月30日
    13
  • Java面试宝典:42个面试题总结!

    Java面试宝典:42个面试题总结!本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力。下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,第二篇主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servlet和JSP。开始!目录面向对象编

    2022年7月7日
    21
  • 弧度和角度的转换_角度与弧度的换算表格

    弧度和角度的转换_角度与弧度的换算表格这两天在看同事写的四叉树代码,当中用到了孤度和角度之间的转换,所以转载此文章进行了学习2009-12-01弧度与角度的关系一、角的两种单位“弧度”和“度”是度量角大小的两种不同的单位。就像“米”和

    2022年8月4日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号