jQuery使用正则验证15/18身份证的方法示例


Posted in jQuery onApril 27, 2017

本文实例讲述了jQuery使用正则验证15/18身份证的方法。分享给大家供大家参考,具体如下:

最好的jQuery正则验证身份证代码:

按照身份证的算法定制而成,精确度完美支持15和18位. 错一个数字或字母都通不过,无需通过数据处理来验证

//身份证检验
var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",
  21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",
  33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",
  42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",
  51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",
  63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"
};
function checkCard(card){
  //是否为空
  if(!card||!isCardNo(card)||!checkProvince(card)||!checkBirthday(card)||!checkParity(card)){
    ZlyJs.divTip("请输入正确的身份证号码");
    jQuery(".sf_list").focus();
    return false;
  }
  return true;
};
//检查号码是否符合规范,包括长度,类型
function isCardNo(card){
  //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
  var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
  if(reg.test(card) === false){
    return false;
  }
  return true;
};
//取身份证前两位,校验省份
function checkProvince(card){
  var province = card.substr(0,2);
  if(vcity[province] == undefined) {
    return false;
  }
  return true;
};
//检查生日是否正确
function checkBirthday(card){
  var len = card.length;
  //身份证15位时,次序为省(3位)市(3位)年(2位)月(2位)日(2位)校验位(3位),皆为数字
  if(len == '15'){
    var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
    var arr_data = card.match(re_fifteen);
    var year = arr_data[2];
    var month = arr_data[3];
    var day = arr_data[4];
    var birthday = new Date('19'+year+'/'+month+'/'+day);
    return verifyBirthday('19'+year,month,day,birthday);
  }
  //身份证18位时,次序为省(3位)市(3位)年(4位)月(2位)日(2位)校验位(4位),校验位末尾可能为X
  if(len == '18'){
    var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
    var arr_data = card.match(re_eighteen);
    var year = arr_data[2];
    var month = arr_data[3];
    var day = arr_data[4];
    var birthday = new Date(year+'/'+month+'/'+day);
    return verifyBirthday(year,month,day,birthday);
  }
  return false;
};
//校验日期
function verifyBirthday(year,month,day,birthday){
  var now = new Date();
  var now_year = now.getFullYear();
  //年月日是否合理
  if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day){
    //判断年份的范围(3岁到100岁之间)
    var time = now_year - year;
    if(time >= 3 && time <= 100)
    {
      return true;
    }
    return false;
  }
  return false;
};
//校验位的检测
function checkParity(card){
  //15位转18位
  card = changeFivteenToEighteen(card);
  var len = card.length;
  if(len == '18'){
    var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
    var cardTemp = 0, i, valnum;
    for(i = 0; i < 17; i ++){
      cardTemp += card.substr(i, 1) * arrInt[i];
    }
    valnum = arrCh[cardTemp % 11];
    if(valnum == card.substr(17, 1)){
      return true;
    }
    return false;
  }
  return false;
};
//15位转18位身份证号
function changeFivteenToEighteen(card){
  if(card.length == '15'){
    var arrInt = new array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
    var arrCh = new array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
    var cardTemp = 0, i;
    card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
    for(i = 0; i < 17; i ++){
      cardTemp += card.substr(i, 1) * arrInt[i];
    }
    card += arrCh[cardTemp % 11];
    return card;
  }
  return card;
};
if (!checkCard(code)) {
  alert("请输入正确的身份证号码");
  return false;
}
jQuery 相关文章推荐
QRCode.js:基于JQuery的生成二维码JS库的使用
Jun 23 jQuery
全面解析jQuery中的$(window)与$(document)的用法区别
Aug 15 jQuery
jQuery中each循环的跳出和结束实例
Aug 16 jQuery
jQuery Collapse1.1.0折叠插件简单使用
Aug 28 jQuery
jquery 实现拖动文件上传加载进度条功能
Mar 18 jQuery
jQuery实现获取选中复选框的值实例详解
Jun 28 jQuery
jQuery实现表单动态添加数据并提交的方法
Jul 19 jQuery
jQuery实现购物车的总价计算和总价传值功能
Nov 28 jQuery
JS 遍历 json 和 JQuery 遍历json操作完整示例
Nov 11 jQuery
jquery实现垂直手风琴导航栏
Feb 18 jQuery
js与jquery获取input输入框中的值实例讲解
Feb 27 jQuery
多种类型jQuery网页验证码插件代码实例
Jan 09 jQuery
jQuery鼠标悬停内容动画切换效果
Apr 27 #jQuery
使用jQuery,Angular实现登录界面验证码详解
Apr 27 #jQuery
jQuery实现鼠标滑过预览图片大图效果的方法
Apr 26 #jQuery
详谈jQuery中使用attr(), prop(), val()获取value的异同
Apr 25 #jQuery
jquery.form.js异步提交表单详解
Apr 25 #jQuery
关于jQuery中fade(),show()起始位置的一点小发现
Apr 25 #jQuery
jquery submit()不能提交表单的解决方法
Apr 24 #jQuery
You might like
全国FM电台频率大全 - 6 辽宁省
2020/03/11 无线电
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
PHP+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
thinkPHP实现表单自动验证
2014/12/24 PHP
经典PHP加密解密函数Authcode()修复版代码
2015/04/05 PHP
jQuery 性能优化手册 推荐
2010/02/23 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
JS 实现获取打开一个界面中输入的值
2013/03/19 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
javascript冒泡排序小结
2016/04/10 Javascript
微信小程序 生命周期详解
2016/10/12 Javascript
Javascript中document.referrer隐藏来源的方法
2017/01/16 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
基于vue 动态加载图片src的解决方法
2018/02/05 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
python模拟enum枚举类型的方法小结
2015/04/30 Python
python编写爬虫小程序
2015/05/14 Python
python 网络爬虫初级实现代码
2016/02/27 Python
Mac 上切换Python多版本
2017/06/17 Python
Python3 中文文件读写方法
2018/01/23 Python
Selenium定时刷新网页的实现代码
2018/10/31 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
Python转换时间的图文方法
2019/07/01 Python
JupyterNotebook设置Python环境的方法步骤
2019/12/03 Python
Java爬虫技术框架之Heritrix框架详解
2020/07/22 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
澳洲国民品牌乡村路折扣店:Country Road & Trenery Outlet
2018/04/19 全球购物
Math.round(11.5)等於多少? Math.round(-11.5)等於多少?
2015/01/27 面试题
好家长事迹材料
2014/01/23 职场文书
国际贸易专业个人求职信格式
2014/02/02 职场文书
奥林匹克运动会口号
2014/06/19 职场文书
使用logback实现按自己的需求打印日志到自定义的文件里
2021/08/30 Java/Android