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

正则实现二代身份证号码验证详解[通俗易懂]最近项目需要对身份证进行比较合理的筛选,并不想用到第三方接口,所以写了个方法:包括支持身份证号合法性验证,支持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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C#的WinForm窗体程序中如何设置TextBox为密码文本框

    C#的WinForm窗体程序中如何设置TextBox为密码文本框C#的WinForm窗体程序中如何设置TextBox为密码文本框-2019-08-0323:59在C#的WinForm窗体程序开发过程中,TextBox是常用的文本框控件,默认的TextBox

    2022年7月1日
    16
  • aws亚马逊配置 https,操作步骤记录[通俗易懂]

    aws亚马逊配置 https,操作步骤记录

    2022年2月14日
    36
  • windows未能启动0xc000000e9_win7状态0xc00000e9

    windows未能启动0xc000000e9_win7状态0xc00000e9问题:计算机无法启动,错误代码为:0xc00000e9解决方法:1、如报错所示,\Windows\System32\config\system文件丢失或损坏;2、修复此问题,需打开Windo

    2022年8月4日
    6
  • jmeter性能测试方案

    jmeter性能测试方案性能测试方案性能测试概述性能测试是通过自动化的测试工具模拟多种正常 峰值以及异常负载条件来对系统的各项指标进行测试 测试前期准备 1 测试需求 1 1 需要将开发给定的需求 前端页面的智能问答接口性能 转为吞吐量和响应时间 1 2 根据测试目的 细化需求 2 测试准备 测试准备包括测试客户端机器准备 测试数据准备 测试脚本准备 3 测试执行 测试的执行中 需要监控测试客户端和服务器性能 监控服务器端应用情况 1 3 1 客户端的系统资源 cpu io memory 情况 1

    2025年6月6日
    0
  • inputstreamreader和outputstreamwriter_input string

    inputstreamreader和outputstreamwriter_input string1.转换流原理2.OutputStreamWriterjava.io.OutputStreamWriterextendsWriterOutputStreamWriter:是字符流通向字节流的桥梁;可使用指定的charset将要写入流中的字符编码成字节。(编码:把能看懂的变成看不懂)2.1继承自父类的共性成员方法:voidwrite(intc)写入单个字符voidwrite(char[]cbuf)写入字符数组abstractvoidwrite(char[]cu

    2022年9月11日
    0
  • Java动态代理实现动态爬虫

    Java动态代理实现动态爬虫笔者公司是一家区块链门户网站,该网站的很多资讯,快讯,视频等数据都是通过爬虫爬取得第三方网站获得的,需要从很多网站要爬取数据,如果每个数据源网站都需要单独写个接口去爬的话,工作量无疑是巨大的,因为笔者想到了通过动态代理实现一套爬虫机制,每次要爬取新的数据源,只要在数据库里增加一条数据源即可,无需修改代码。废话不多说,下贴出数据库表结构DROPTABLEIFEXISTS…

    2022年7月15日
    17

发表回复

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

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