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 相关文章推荐
可以显示单图片,多图片ajax请求的ThickBox3.1类下载
Dec 23 Javascript
最常用的12种设计模式小结
Aug 09 Javascript
最新的10款jQuery内容滑块插件分享
Sep 18 Javascript
jQuery实现HTML5 placeholder效果实例
Dec 09 Javascript
ES6中非常实用的新特性介绍
Mar 10 Javascript
详解JavaScript中的自定义事件编写
May 10 Javascript
纯前端JavaScript实现Excel IO案例分享
Aug 26 Javascript
React中使用collections时key的重要性详解
Aug 07 Javascript
JavaScript中关于class的调用方法
Nov 28 Javascript
react配合antd组件实现的管理系统示例代码
Apr 24 Javascript
基于JS实现带动画效果的流程进度条
Jun 01 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
Jul 28 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
一个分页的论坛
2006/10/09 PHP
PHP操作mysql函数详解,mysql和php交互函数
2011/05/19 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
PHP删除HTMl标签的三种解决方法
2013/06/30 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
php实现excel中rank函数功能的方法
2015/01/20 PHP
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
2007/02/09 Javascript
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
jQuery控制输入框只能输入数值的小例子
2013/03/20 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
微信小程序  自定义创建详细介绍
2016/10/27 Javascript
vue-cli如何快速构建vue项目
2017/04/26 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
vue 二维码长按保存和复制内容操作
2020/09/22 Javascript
python 二分查找和快速排序实例详解
2017/10/13 Python
python opencv实现切变换 不裁减图片
2018/07/26 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
Django自定义模板过滤器和标签的实现方法
2019/08/21 Python
tensorflow 实现数据类型转换
2020/02/17 Python
Selenium启动Chrome时配置选项详解
2020/03/18 Python
python装饰器三种装饰模式的简单分析
2020/09/04 Python
python更新数据库中某个字段的数据(方法详解)
2020/11/18 Python
Numpy中np.max的用法及np.maximum区别
2020/11/27 Python
获取邓白氏信用报告:Dun & Bradstreet
2019/01/22 全球购物
实习生自荐信范文
2013/11/13 职场文书
优秀导游先进事迹材料
2014/01/25 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
分公司任命书
2014/06/06 职场文书
小学生运动会报道稿
2014/09/12 职场文书
授权委托书协议书
2014/10/16 职场文书
学生检讨书
2015/01/27 职场文书
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js