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 相关文章推荐
JS Array对象入门分析
Oct 30 Javascript
javascript基础知识大全 便于大家学习,也便于我自己查看
Aug 17 Javascript
推荐40个简单的 jQuery 导航插件和教程(下篇)
Sep 14 Javascript
jquery实现通用版鼠标经过淡入淡出效果
Jun 15 Javascript
Jsonp post 跨域方案
Jul 06 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
Jan 23 Javascript
用JavaScript实现让浏览器停止载入页面的方法
Jan 19 Javascript
WdatePicker.js时间日期插件的使用方法
Jul 26 Javascript
Vue框架中正确引入JS库的方法介绍
Jul 30 Javascript
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
Nov 06 Javascript
node中实现删除目录的几种方法
Jun 24 Javascript
electron 如何将任意资源打包的方法步骤
Apr 16 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安装攻略:常见问题解答(三)
2006/10/09 PHP
linux下使用ThinkPHP需要注意大小写导致的问题
2011/08/02 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
用jQuery实现检测浏览器及版本的脚本代码
2008/01/22 Javascript
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
jQuery插件实现屏蔽单个元素使用户无法点击
2013/04/12 Javascript
jquery常用操作小结
2014/07/21 Javascript
jquery实现鼠标滑过小图时显示大图的方法
2015/01/14 Javascript
JS实现的论坛Ajax打分效果完整实例
2015/10/31 Javascript
JavaScript事件学习小结(五)js中事件类型之鼠标事件
2016/06/09 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
vue结合axios与后端进行ajax交互的方法
2018/07/06 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
Layui弹出层 加载 做编辑页面的方法
2019/09/16 Javascript
Python数据库的连接实现方法与注意事项
2016/02/27 Python
Python 基础教程之闭包的使用方法
2017/09/29 Python
对python的bytes类型数据split分割切片方法
2018/12/04 Python
100行Python代码实现每天不同时间段定时给女友发消息
2019/09/27 Python
Django重设Admin密码过程解析
2020/02/10 Python
关于Python字符编码与二进制不得不说的一些事
2020/10/04 Python
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型
2013/10/30 面试题
优秀员工个人的自我评价
2013/11/29 职场文书
班组长安全生产职责
2013/12/16 职场文书
12月小学生校园广播稿
2014/02/04 职场文书
环保建议书100字
2014/05/14 职场文书
党的群众路线个人对照检查材料
2014/09/23 职场文书
2014年卫生监督工作总结
2014/12/09 职场文书
企业员工辞职信范文
2015/05/12 职场文书
工作年限证明范本
2015/06/15 职场文书
Python基础之元编程知识总结
2021/05/23 Python
一篇文章弄懂Python关键字、标识符和变量
2021/07/15 Python