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 相关文章推荐
IE中createElement需要注意的一个问题
Jul 13 Javascript
JavaScript字符串String和Array操作的有趣方法
Dec 18 Javascript
jQuery CSS3相结合实现时钟插件
Jan 08 Javascript
7个jQuery最佳实践
Jan 12 Javascript
JavaScript如何实现跨域请求
Aug 05 Javascript
基于JS实现仿京东搜索栏随滑动透明度渐变效果
Jul 10 Javascript
weex slider实现滑动底部导航功能
Aug 28 Javascript
解决vue的 v-for 循环中图片加载路径问题
Sep 03 Javascript
使用Angular自定义字段校验指令的方法示例
Feb 01 Javascript
微信小程序实现上传word、txt、Excel、PPT等文件功能
May 23 Javascript
ant-design-vue 快速避坑指南(推荐)
Jan 21 Javascript
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 Vue.js
详解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
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
PHP_Flame(Version:Progress)的原代码
2006/10/09 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
php数组查找函数in_array()、array_search()、array_key_exists()使用实例
2014/04/29 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
jQuery ajax(复习)—Baidu ajax request分离版
2013/01/24 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
jQuery实现鼠标双击Table单元格变成文本框及输入内容后更新到数据库的方法
2015/11/25 Javascript
AngularJs动态加载模块和依赖注入详解
2016/01/11 Javascript
JQuery Mobile实现导航栏和页脚
2016/03/09 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
2017/05/03 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
解决微信二次分享不显示摘要和图片的问题
2017/08/18 Javascript
解决Vue2.0中使用less给元素添加背景图片出现的问题
2018/09/03 Javascript
利用Python中的mock库对Python代码进行模拟测试
2015/04/16 Python
python实现在每个独立进程中运行一个函数的方法
2015/04/23 Python
python定时关机小脚本
2018/06/20 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
python实现自动化上线脚本的示例
2019/07/01 Python
Django 外键的使用方法详解
2019/07/19 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
Django视图类型总结
2021/02/17 Python
HTML+CSS3+JS 实现的下拉菜单
2020/11/25 HTML / CSS
澳大利亚最好的厨具店:Kitchen Warehouse
2018/03/13 全球购物
违纪检讨书2000字
2014/02/08 职场文书
小学校园之星事迹材料
2014/05/16 职场文书
音乐节策划方案
2014/06/09 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
消夏晚会主持词
2015/06/30 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
编写python程序的90条建议
2021/04/14 Python
javascript条件式访问属性和箭头函数介绍
2021/11/17 Javascript