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网页关键字高亮代码
Jul 30 Javascript
JAVASCRIPT keycode总结
Feb 04 Javascript
仅Firefox中链接A无法实现模拟点击以触发其默认行为
Jul 31 Javascript
scrollWidth,clientWidth,offsetWidth的区别
Jan 13 Javascript
JavaScript插件化开发教程(五)
Feb 01 Javascript
javascript中createElement的两种创建方式
May 14 Javascript
关于Function中的bind()示例详解
Dec 02 Javascript
Bootstrap导航条学习使用(二)
Feb 08 Javascript
微信小程序App生命周期详解
Jan 31 Javascript
Vue函数式组件的应用实例详解
Aug 30 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
Jun 02 jQuery
vue中控制mock在开发环境使用,在生产环境禁用方式
Apr 06 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
BBS(php &amp; mysql)完整版(七)
2006/10/09 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
php+mysql查询实现无限下级分类树输出示例
2016/10/03 PHP
详解配置 Apache 服务器支持 PHP 文件的解析
2017/02/15 PHP
jQuery 页面 Mask实现代码
2010/01/09 Javascript
JS中不为人知的五种声明Number的方式简要概述
2013/02/22 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
jquery自定义表格样式
2015/11/23 Javascript
详解AngularJS中$http缓存以及处理多个$http请求的方法
2016/02/06 Javascript
基于BootStrap Metronic开发框架经验小结【一】框架总览及菜单模块的处理
2016/05/12 Javascript
Bootstrap 网站实例之单页营销网站
2016/10/20 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
详解bootstrap导航栏.nav与.navbar区别
2017/11/23 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
JS数组方法reverse()用法实例分析
2020/01/18 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
Python THREADING模块中的JOIN()方法深入理解
2015/02/18 Python
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
Python Pandas实现数据分组求平均值并填充nan的示例
2019/07/04 Python
使用Python脚本zabbix自定义key监控oracle连接状态
2019/08/28 Python
Python如何优雅获取本机IP方法
2019/11/10 Python
python爬虫使用正则爬取网站的实现
2020/08/03 Python
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?
2015/02/22 面试题
20岁生日感言
2014/01/13 职场文书
食品安全工作实施方案
2014/03/26 职场文书
青蓝工程实施方案
2014/03/27 职场文书
8和9的加减法教学反思
2014/05/01 职场文书
志愿者爱心公益活动策划方案
2014/09/15 职场文书
公积金具结保证书
2015/05/11 职场文书
通过T-SQL语句创建游标与实现数据库加解密功能
2022/03/16 SQL Server