JS正则表达式完美实现身份证校验功能


Posted in Javascript onOctober 18, 2017

注意:

1、只针对18为身份证号码进行校验,现在15位的应该很少了,

2、不区分xX大小写,

3、出生年份1900-2099,每月的天数也进行相关验证(考虑的闰月的情况),

4、校验规则详见,这个写的比较详细和清楚,相信看过后都可以自己写一个,

https://jingyan.baidu.com/article/7f41ececff944a593d095c8c.html

5、目前还无法对区位码就进行精确校验,本人搜集整理了区位码,提供了一个查询api,仅攻参考。

有不精确的地方可以留言指出

api地址:http://www.xuzee.com/api/idcard.php

接口说明:http://www.xuzee.com/api/

6、这个验证函数目前在项目中实际运行,暂未发现问题,有问题会进行更新。

以上

直接上代码:

function testid(id) {
   // 1 "验证通过!", 0 //校验不通过 // id为身份证号码
    var format = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/;
    //号码规则校验
    if(!format.test(id)){
      return {'status':0,'msg':'身份证号码不合规'};
    }
    //区位码校验
    //出生年月日校验  前正则限制起始年份为1900;
    var year = id.substr(6,4),//身份证年
      month = id.substr(10,2),//身份证月
      date = id.substr(12,2),//身份证日
      time = Date.parse(month+'-'+date+'-'+year),//身份证日期时间戳date
      now_time = Date.parse(new Date()),//当前时间戳
      dates = (new Date(year,month,0)).getDate();//身份证当月天数
    if(time>now_time||date>dates){
      return {'status':0,'msg':'出生日期不合规'}
    }
    //校验码判断
    var c = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);  //系数
    var b = new Array('1','0','X','9','8','7','6','5','4','3','2'); //校验码对照表
    var id_array = id.split("");
    var sum = 0;
    for(var k=0;k<17;k++){
      sum+=parseInt(id_array[k])*parseInt(c[k]);
    }
    if(id_array[17].toUpperCase() != b[sum%11].toUpperCase()){
      return {'status':0,'msg':'身份证校验码不合规'}
    }
    return {'status':1,'msg':'校验通过'}
}
Javascript 相关文章推荐
JavaScript this 深入理解
Jul 30 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
Apr 09 Javascript
struts2+jquery组合验证注册用户是否存在
Apr 30 Javascript
jQuery多条件筛选如何实现
Nov 04 Javascript
图解Sublime Text3使用技巧
Dec 21 Javascript
javascript 数组的正态分布排序的问题
Jul 31 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
Jan 23 Javascript
解决Linux无法正常安装与卸载Node.js的方法
Jan 19 Javascript
extract-text-webpack-plugin用法详解
Feb 14 Javascript
微信JSSDK实现打开摄像头拍照再将相片保存到服务器
Nov 15 Javascript
JS简易计算器实例讲解
Jun 30 Javascript
详谈Object.defineProperty 及实现数据双向绑定
Jul 18 Javascript
详解vue项目首页加载速度优化
Oct 18 #Javascript
JS简单实现滑动加载数据的方法示例
Oct 18 #Javascript
详解cordova打包成webapp的方法
Oct 18 #Javascript
prototype.js简单实现ajax功能示例
Oct 18 #Javascript
浅谈JS函数节流防抖
Oct 18 #Javascript
用vue封装插件并发布到npm的方法步骤
Oct 18 #Javascript
详解Js中的模块化是如何实现的
Oct 18 #Javascript
You might like
PHP测试程序运行时间的类
2012/02/05 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
PHP邮件发送类PHPMailer用法实例详解
2014/09/22 PHP
PHP使用SWOOLE扩展实现定时同步 MySQL 数据
2017/04/09 PHP
visual studio code 调试php方法(图文详解)
2017/09/15 PHP
JS代码格式化和语法着色V2
2006/10/14 Javascript
xtree.js 代码
2007/03/13 Javascript
Textarea与懒惰渲染实现代码
2012/01/04 Javascript
JavaScript中的面向对象介绍
2012/06/30 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
jQuery大于号(&gt;)选择器的作用解释
2015/01/13 Javascript
一张Web前端的思维导图分享
2015/07/03 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
微信小程序 向左滑动删除功能的实现
2017/03/10 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
python如何查看系统网络流量的信息
2016/09/12 Python
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
python re模块findall()函数实例解析
2018/01/19 Python
python查询mysql,返回json的实例
2018/03/26 Python
Python玩转PDF的各种骚操作
2019/05/06 Python
python图像和办公文档处理总结
2019/05/28 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
Python3列表List入门知识附实例
2020/02/09 Python
荷兰本土平价百货:HEMA
2017/10/23 全球购物
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
高一自我鉴定
2013/12/17 职场文书
优秀通讯员事迹材料
2014/01/28 职场文书
护理专科学生自荐书
2014/07/05 职场文书
公司财务部岗位职责
2015/04/14 职场文书
复兴之路纪录片观后感
2015/06/02 职场文书
什么是执行力?9个故事告诉您:成功绝非偶然!
2019/07/05 职场文书