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实现图片轮播效果代码
Sep 03 Javascript
使用Firebug对js进行断点调试的图文方法
Apr 02 Javascript
js 浏览器事件介绍
Mar 30 Javascript
jquery ajax 局部无刷新更新数据的实现案例
Feb 08 Javascript
分享15个大家都熟知的jquery小技巧
Dec 02 Javascript
jQuery抛物线运动实现方法(附完整demo源码下载)
Jan 08 Javascript
学习Bootstrap滚动监听 附调用方法
Jul 02 Javascript
输入框点击时边框变色效果的实现方法
Dec 26 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
Mar 09 Javascript
ng-zorro-antd 入门初体验
Dec 03 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
Feb 27 Javascript
非常漂亮的js烟花效果
Mar 10 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
fleaphp下不确定的多条件查询的巧妙解决方法
2008/09/11 PHP
php下关于中英数字混排的字符串分割问题
2010/04/06 PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
2013/06/28 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
php求数组全排列,元素所有组合的方法
2016/05/05 PHP
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
2015/02/03 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
微信小程序进行微信支付的步骤昂述
2016/12/01 Javascript
vue开发chrome插件,实现获取界面数据和保存到数据库功能
2020/12/01 Vue.js
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
Python采集腾讯新闻实例
2014/07/10 Python
python 线程的暂停, 恢复, 退出详解及实例
2016/12/06 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
python分布式环境下的限流器的示例
2017/10/26 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
Pycharm更换python解释器的方法
2018/10/29 Python
python获取服务器响应cookie的实例
2018/12/28 Python
python的schedule定时任务模块二次封装方法
2019/02/19 Python
如何使用Python 打印各种三角形
2019/06/28 Python
离线状态下在jupyter notebook中使用plotly实例
2020/04/24 Python
仿酷狗html5手机音乐播放器主要部分代码
2013/05/15 HTML / CSS
皮尔·卡丹巴西官方商店:Pierre Cardin
2017/07/21 全球购物
微软新西兰官方网站:Microsoft New Zealand
2018/08/17 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
Whistles官网:英国女装品牌
2020/08/14 全球购物
internal修饰符起什么作用
2013/12/16 面试题
农民致富事迹材料
2014/01/23 职场文书
《荷花》教学反思
2014/04/16 职场文书
广告宣传策划方案
2014/05/21 职场文书
经营管理策划方案
2014/05/22 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
酒店温馨提示语
2015/07/14 职场文书
党性修养心得体会2016
2016/01/21 职场文书
goland 清除所有的默认设置操作
2021/04/28 Golang