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 相关文章推荐
巧妙破除网页右键禁用的十大绝招
Aug 12 Javascript
Javascript倒计时页面跳转实例小结
Sep 11 Javascript
javascript中数组的冒泡排序使用示例
Dec 18 Javascript
Javascript中的String对象详谈
Mar 03 Javascript
JS判断客服QQ号在线还是离线状态的方法
Jan 13 Javascript
js操作DOM--添加、删除节点的简单实例
Jul 08 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
Bootstrap3 模态框使用实例
Feb 22 Javascript
Array数组对象中的forEach、map、filter及reduce详析
Aug 02 Javascript
关于vue编译版本引入的问题的解决
Sep 17 Javascript
开发Node CLI构建微信小程序脚手架的示例
Mar 27 Javascript
Vue-cli4 配置 element-ui 按需引入操作
Sep 11 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
常用星际术语索引(新手指南)
2020/03/04 星际争霸
php下实现折线图效果的代码
2007/04/28 PHP
Google Voice 短信发送接口PHP开源版(2010.5更新)
2010/07/22 PHP
php中设置index.php文件为只读的方法
2013/02/06 PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
2016/07/12 PHP
phpcms中的评论样式修改方法
2016/10/21 PHP
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
AngularJS内置指令
2015/02/04 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
2020/11/17 Vue.js
[01:21]辉夜杯战队访谈宣传片—CDEC
2015/12/25 DOTA
Python greenlet实现原理和使用示例
2014/09/24 Python
Python去除字符串两端空格的方法
2015/05/21 Python
python实现web方式logview的方法
2015/08/10 Python
Python 通过pip安装Django详细介绍
2017/04/28 Python
Python3.6简单反射操作示例
2018/06/14 Python
flask入门之表单的实现
2018/07/18 Python
Django model update的多种用法介绍
2020/03/28 Python
python 定时器每天就执行一次的实现代码
2019/08/14 Python
python爬虫可以爬什么
2020/06/16 Python
华润集团网上药店:健一网
2016/09/19 全球购物
CK巴西官方网站:Calvin Klein巴西
2019/07/19 全球购物
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
ShellScript面试题一则-ShellScript编程
2014/06/24 面试题
2015年乡镇流动人口工作总结
2015/05/12 职场文书
大学生受助感言
2015/08/01 职场文书
2019大学生社会实践报告汇总
2019/08/16 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
Axios取消重复请求的方法实例详解
2021/06/15 Javascript