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 相关文章推荐
jQuery操作之效果详解
May 19 jQuery
jQuery滚动插件scrollable.js用法分析
May 25 jQuery
详谈表单格式化插件jquery.serializeJSON
Jun 23 jQuery
jQuery实现frame之间互通的方法
Jun 26 jQuery
jQuery实现可兼容IE6的遮罩功能详解
Sep 19 jQuery
jQuery幻灯片插件owlcarousel参数说明中文文档
Feb 27 jQuery
JQuery选中select组件被选中的值方法
Mar 08 jQuery
解决jquery有正确返回值但不执行success函数的问题
Aug 20 jQuery
jQuery实现的鼠标拖动画矩形框示例【可兼容IE8】
May 17 jQuery
JS拖动选择table里的单元格完整实例【基于jQuery】
May 28 jQuery
jquery实现掷骰子小游戏
Oct 24 jQuery
jQuery实现带进度条的轮播图
Sep 13 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
配置Apache2.2+PHP5+CakePHP1.2+MySQL5运行环境
2009/04/25 PHP
PHP 巧用数组降低程序的时间复杂度
2010/01/01 PHP
PHP性能分析工具XHProf安装使用教程
2015/05/13 PHP
php商品对比功能代码分享
2015/09/24 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
PHP二维关联数组的遍历方式(实例讲解)
2017/10/18 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
jQuery中调用WebService方法小结
2011/03/28 Javascript
JS 实现Table相同行的单元格自动合并示例代码
2013/08/27 Javascript
js中同步与异步处理的方法和区别总结
2013/12/25 Javascript
深入理解JavaScript的React框架的原理
2015/07/02 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
jquery的ajax提交form表单的两种方法小结(推荐)
2016/05/25 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
javascript工厂模式和构造函数模式创建对象方法解析
2016/12/30 Javascript
基于JQuery及AJAX实现名人名言随机生成器
2017/02/10 Javascript
JSON与JS对象的区别与对比
2017/03/01 Javascript
基于AngularJS的拖拽文件上传的实例代码
2017/07/15 Javascript
Vue数字输入框组件示例代码详解
2020/01/15 Javascript
Python时间模块datetime、time、calendar的使用方法
2016/01/13 Python
Python编程实现蚁群算法详解
2017/11/13 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
Python 实现中值滤波、均值滤波的方法
2019/01/09 Python
Python基础学习之函数方法实例详解
2019/06/18 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
jupyter 中文乱码设置编码格式 避免控制台输出的解决
2020/04/20 Python
通俗易懂了解Python装饰器原理
2020/09/17 Python
python 实现aes256加密
2020/11/27 Python
全方位了解CSS3的Regions扩展
2015/08/07 HTML / CSS
幼儿园门卫岗位职责
2014/02/14 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
学术研讨会欢迎词
2015/01/26 职场文书
2016大学生党校学习心得体会
2016/01/06 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
Django一小时写出账号密码管理系统
2021/04/29 Python