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小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
Jul 25 Javascript
node.js中的path.sep方法使用说明
Dec 08 Javascript
javascript基本包装类型介绍
Apr 10 Javascript
JavaScript中Window对象的属性及事件
Dec 25 Javascript
限制文本框只能输入数字||只能是数字和小数点||只能是整数和浮点数
May 27 Javascript
jQuery实现手机自定义弹出输入框
Jun 13 Javascript
深入理解bootstrap框架之第二章整体架构
Oct 09 Javascript
Angularjs上传文件组件flowjs功能
Aug 07 Javascript
微信小程序自定义底部弹出框
Nov 16 Javascript
vue组件 keep-alive 和 transition 使用详解
Oct 11 Javascript
javascript实现点亮灯泡特效示例
Oct 15 Javascript
JS array数组检测方式解析
May 19 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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
杏林同学录(八)
2006/10/09 PHP
php中大括号作用介绍
2012/03/22 PHP
Apache连接PHP后无法启动问题解决思路
2015/06/18 PHP
PHP解决中文乱码
2017/04/28 PHP
详解JavaScript时间格式化
2015/12/23 Javascript
JS HTML5实现拖拽移动列表效果
2020/08/27 Javascript
javascript self对象使用详解
2016/10/18 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
解决jquery appaend元素中id绑定事件失效的问题
2017/09/12 jQuery
VUE v-model表单数据双向绑定完整示例
2019/01/21 Javascript
redux.js详解及基本使用
2019/05/24 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
Vue 中可以定义组件模版的几种方式
2019/08/06 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
JS实现悬浮球只在一侧滑动并且是横屏状态下
2020/08/19 Javascript
PHP 502bad gateway原因及解决方案
2020/11/13 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
python爬取cnvd漏洞库信息的实例
2019/02/14 Python
python使用sklearn实现决策树的方法示例
2019/09/12 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
通过实例解析Python RPC实现原理及方法
2020/07/07 Python
Python如何重新加载模块
2020/07/29 Python
Python Map 函数的使用
2020/08/28 Python
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
戴尔马来西亚官网:Dell Malaysia
2020/05/02 全球购物
机电一体化毕业生求职信
2013/11/02 职场文书
学习十八大精神心得体会
2013/12/31 职场文书
工商治理实习生的自我评价分享
2014/02/20 职场文书
优秀食品类广告词
2014/03/19 职场文书
大学自主招生推荐信
2014/05/10 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
三严三实对照检查材料
2014/08/25 职场文书
python 经纬度求两点距离、三点面积操作
2021/06/03 Python