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 相关文章推荐
JavaScript使用链式方法封装jQuery中CSS()方法示例
Apr 07 jQuery
jQuery模拟实现天猫购物车动画效果实例代码
May 25 jQuery
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
Aug 01 jQuery
jQuery上传插件webupload使用方法
Aug 01 jQuery
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
jQuery niceScroll滚动条错位问题的解决方法
Feb 03 jQuery
jQuery简单实现根据日期计算星期几的方法
Jan 09 jQuery
jquery实现选项卡切换代码实例
May 14 jQuery
jquery实现垂直无限轮播的方法分析
Jul 16 jQuery
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
Sep 03 jQuery
jQuery弹框插件使用方法详解
May 26 jQuery
jQuery实现B2B网站后台管理系统侧导航
Jul 08 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
关于PHP的curl开启问题探讨
2014/04/08 PHP
php禁用函数设置及查看方法详解
2016/07/25 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
javascript-TreeView父子联动效果保持节点状态一致
2007/08/12 Javascript
javascript 星级评分效果(手写)
2012/12/24 Javascript
js通过八个点 拖动改变div大小的实现方法
2014/03/05 Javascript
jQuery $.extend()用法总结
2014/06/15 Javascript
教你如何使用node.js制作代理服务器
2014/11/26 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
jquery实现简单手风琴菜单效果实例
2015/06/13 Javascript
基于jquery实现无限级树形菜单
2016/03/22 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
JS模拟超市简易收银台小程序代码解析
2017/08/18 Javascript
详解element-ui日期时间选择器的日期格式化问题
2019/04/08 Javascript
vue实现简单的日历效果
2020/09/24 Javascript
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
对于Python装饰器使用的一些建议
2015/06/03 Python
python开发之thread实现布朗运动的方法
2015/11/11 Python
python爬虫的工作原理
2017/03/05 Python
Python自定义线程池实现方法分析
2018/02/07 Python
python批量赋值操作实例
2018/10/22 Python
Python常用爬虫代码总结方便查询
2019/02/25 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
python实现移动木板小游戏
2020/10/09 Python
基于Python实现全自动下载抖音视频
2020/11/06 Python
物流仓储实习自我鉴定
2013/09/25 职场文书
护理专科毕业生自荐书范文
2014/02/19 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
飞机制造技术专业求职信
2014/07/27 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
个人德育工作总结
2015/03/05 职场文书
为Centos安装指定版本的Docker
2022/04/01 Servers
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android