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 23 jQuery
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
Jul 08 jQuery
CSS3结合jQuery实现动画效果及回调函数的实例
Dec 27 jQuery
jQuery第一次运行页面默认触发点击事件的实例
Jan 10 jQuery
jquery动态添加带有样式的HTML标签元素方法
Feb 24 jQuery
jQuery实现炫丽的3d旋转星空效果
Jul 04 jQuery
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
Oct 26 jQuery
详解webpack引用jquery(第三方模块)的三种办法
Aug 21 jQuery
Jquery动态列功能完整实例
Aug 30 jQuery
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
May 19 jQuery
jquery实现拖拽添加元素功能
Dec 01 jQuery
jQuery实现简单弹幕制作
Dec 10 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
解析CI即CodeIgniter框架在Nginx下的重写规则
2013/06/03 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
实例讲解PHP表单
2020/06/10 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
img的onload的另类用法
2008/01/10 Javascript
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
深入理解JavaScript系列(50):Function模式(下篇)
2015/03/04 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
浅谈AngularJs指令之scope属性详解
2016/10/24 Javascript
浅谈pc端rem字体设置的问题
2017/08/03 Javascript
axios发送post请求,提交图片类型表单数据方法
2018/03/16 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
JavaScript fetch接口案例解析
2018/08/30 Javascript
Element-ui中元素滚动时el-option超出元素区域的问题
2019/05/30 Javascript
微信小程序获取用户绑定手机号方法示例
2019/07/21 Javascript
jQuery中DOM常见操作实例小结
2019/08/01 jQuery
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
Anaconda2下实现Python2.7和Python3.5的共存方法
2018/06/11 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
Python正则表达式匹配和提取IP地址
2019/06/06 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
Python selenium 加载并保存QQ群成员,去除其群主、管理员信息的示例代码
2020/05/28 Python
如何利用python生成MD5并去重
2020/12/07 Python
Html5页面二次分享的实现
2018/07/30 HTML / CSS
高级Java程序员面试题
2016/06/23 面试题
个人自荐书
2013/12/20 职场文书
机械制造专业个人的自我评价
2013/12/28 职场文书
数控技术学生的自我评价
2014/02/15 职场文书
《老山界》教学反思
2014/04/08 职场文书
网站推广策划方案
2014/06/04 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
职业规划从高考志愿专业选择开始
2019/08/08 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
Oracle安装TNS_ADMIN环境变量设置参考
2021/11/01 Oracle
使用refresh_token实现无感刷新页面
2022/04/26 Javascript