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 相关文章推荐
JQuery学习笔录 简单的JQuery
Apr 09 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
Nov 07 Javascript
当滚动条滚动到页面底部自动加载增加内容的js代码
May 13 Javascript
jquery实现鼠标悬浮停止轮播特效
Aug 20 Javascript
将List对象列表转换成JSON格式的类实现方法
Jul 04 Javascript
微信小程序 数据遍历的实现
Apr 05 Javascript
vue中将网页打印成pdf实例代码
Jun 15 Javascript
通过cordova将vue项目打包为webapp的方法
Feb 02 Javascript
vue data引入本地图片的两种方式小结
Nov 13 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
Jul 28 Javascript
JavaScript代码模拟鼠标自动点击事件示例
Aug 07 Javascript
使用Mock.js生成前端测试数据
Dec 13 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
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
2019/10/24 PHP
使用jQuery全局事件ajaxStart为特定请求实现提示效果的代码
2010/12/30 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
jQuery避免$符和其他JS库冲突的方法对比
2014/02/20 Javascript
简单谈谈javascript代码复用模式
2015/01/28 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
微信小程序实现图片预加载组件
2017/01/18 Javascript
Jquery实现跨域异步上传文件总结
2017/02/03 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
微信提示 在浏览器打开 效果实现过程解析
2019/09/10 Javascript
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
纯用NumPy实现神经网络的示例代码
2018/10/24 Python
PyTorch的深度学习入门之PyTorch安装和配置
2019/06/27 Python
基于Python fminunc 的替代方法
2020/02/29 Python
OpenCV+python实现实时目标检测功能
2020/06/24 Python
高考考python编程是真的吗
2020/07/20 Python
Python return语句如何实现结果返回调用
2020/10/15 Python
css背景图片的背景裁切、背景透明度、背景变换等效果运用
2012/12/24 HTML / CSS
html5中JavaScript removeChild 删除所有节点
2014/05/16 HTML / CSS
环境工程大学生自荐信
2013/10/21 职场文书
求职意向书范文
2014/04/01 职场文书
股权投资意向书
2014/04/01 职场文书
挂牌仪式策划方案
2014/05/18 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
村当支部个人对照检查材料思想汇报
2014/10/06 职场文书
教师党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
财务会计实训报告
2014/11/05 职场文书
2015年安全保卫工作总结
2015/05/14 职场文书
python批量创建变量并赋值操作
2021/06/03 Python