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获取当页面上鼠标光标位置和触发事件的对象的代码
Dec 09 Javascript
基于jquery异步传输json数据格式实例代码
Nov 23 Javascript
node.js中的fs.rename方法使用说明
Dec 16 Javascript
jQuery语法小结(超实用)
Dec 31 Javascript
设置jQueryUI DatePicker默认语言为中文
Jun 04 Javascript
jQuery向父辈遍历的简单方法
Sep 18 Javascript
Jquery 整理元素选取、常用方法一览表
Nov 26 Javascript
微信小程序开发之实现自定义Toast弹框
Jun 08 Javascript
JS实现的随机排序功能算法示例
Jun 09 Javascript
layer.open的自适应及居中及子页面标题的修改方法
Sep 05 Javascript
vue如何实现动态加载脚本
Feb 05 Javascript
js实现简单的无缝轮播效果
Sep 05 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
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
效率高的Javscript字符串替换函数的benchmark
2008/08/02 Javascript
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
用显卡加速,轻松把笔记本打造成取暖器的办法!
2013/04/17 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
jquery通过visible来判断标签是否显示或隐藏
2014/05/08 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
用jquery修复在iframe下的页面锚点失效问题
2014/08/22 Javascript
分享网页检测摇一摇实例代码
2016/01/14 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
jQuery实现字符串全部替换的方法
2016/12/12 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
JS实现合并json对象的方法
2017/10/10 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
基于JavaScript中标识符的命名规则介绍
2018/01/06 Javascript
JavaScript迭代器的含义及用法
2019/06/21 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python实现多线程的两种方式
2016/05/22 Python
利用Python爬虫给孩子起个好名字
2017/02/14 Python
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
中国一家综合的外贸B2C电子商务网站:DealeXtreme(DX)
2020/03/10 全球购物
医科大学生毕业的自我评价分享
2013/11/12 职场文书
毕业自我鉴定总结
2014/03/24 职场文书
企业安全生产月活动总结
2014/07/05 职场文书
2014年学校国庆主题活动方案
2014/09/16 职场文书
励志语录:你若不勇敢,谁替你坚强
2019/11/08 职场文书
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL