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实现图片平滑滚动详解
Mar 22 jQuery
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
jQuery实现动态删除LI的方法
May 30 jQuery
简述jQuery Easyui一些用法
Aug 01 jQuery
jQuery实现列表的增加和删除功能
Jun 14 jQuery
jQuery实现模糊搜索功能的方法分析
Jun 29 jQuery
jquery使用FormData实现异步上传文件
Oct 25 jQuery
jQuery选择器选中最后一个元素,倒数第二个元素操作示例
Dec 10 jQuery
jQuery操作事件完整实例分析
Jan 10 jQuery
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 jQuery
jQuery实现的分页插件完整示例
May 26 jQuery
深入分析jQuery.one() 函数
Jun 03 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
《星际争霸重制版》兵种对比图鉴
2020/03/02 星际争霸
使用PHP导出Word文档的原理和实例
2013/10/21 PHP
php中get_defined_constants函数用法实例分析
2015/05/12 PHP
比较简单的一个符合web标准的JS调用flash方法
2007/11/29 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
2014/09/04 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
jQuery+PHP+MySQL实现无限级联下拉框效果
2016/02/19 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
python 测试实现方法
2008/12/24 Python
各种Python库安装包下载地址与安装过程详细介绍(Windows版)
2016/11/02 Python
名片管理系统python版
2018/01/11 Python
python实现快速排序的示例(二分法思想)
2018/03/12 Python
用pycharm开发django项目示例代码
2019/06/13 Python
python如何使用Redis构建分布式锁
2020/01/16 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
Python龙贝格法求积分实例
2020/02/29 Python
OpenCV灰度化之后图片为绿色的解决
2020/12/01 Python
HTML5 input placeholder 颜色修改示例
2014/05/30 HTML / CSS
Reformation官网:美国女装品牌
2018/09/14 全球购物
如何处理简单的PHP错误
2015/10/14 面试题
九州传奇上机题
2014/07/10 面试题
七年级英语教学反思
2014/01/15 职场文书
中国央视网签名寄语
2014/01/18 职场文书
年度考核自我鉴定
2014/02/02 职场文书
医师定期考核实施方案
2014/05/07 职场文书
2015年仓库工作总结
2015/04/09 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
Redis全局ID生成器的实现
2022/06/05 Redis
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers