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中fade(),show()起始位置的一点小发现
Apr 25 jQuery
jQuery 添加样式属性的优先级别方法(推荐)
Jun 08 jQuery
JQuery EasyUI的一些常用组件
Jul 12 jQuery
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
Aug 04 jQuery
基于jQuery实现的单行公告活动轮播效果
Aug 23 jQuery
jQuery EasyUI Layout实现tabs标签的实例
Sep 26 jQuery
jQuery实现checkbox全选功能完整实例
Jul 12 jQuery
jQuery操作cookie的示例代码
Jun 05 jQuery
javascript/jquery实现点击触发事件的方法分析
Nov 11 jQuery
jQuery+ThinkPHP实现图片上传
Jul 23 jQuery
jquery实现简易验证插件封装
Sep 13 jQuery
jquery实现穿梭框功能
Jan 19 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下检测字符串是否是utf8编码的代码
2008/06/28 PHP
简单的php数据库操作类代码(增,删,改,查)
2013/04/08 PHP
ThinkPHP模板替换与系统常量及应用实例教程
2014/08/22 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
js操作select控件的几种方法
2010/06/02 Javascript
解析John Resig Simple JavaScript Inheritance代码
2012/12/03 Javascript
利用JS解决ie6不支持max-width,max-height问题的方法
2014/01/02 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
JS显示下拉列表框内全部元素的方法
2015/03/31 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
js断点调试经验分享
2017/12/08 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
jquery树形插件zTree高级使用详解
2019/08/16 jQuery
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
Ant Design Vue table中列超长显示...并加提示语的实例
2020/10/31 Javascript
python支持断点续传的多线程下载示例
2014/01/16 Python
python进阶教程之词典、字典、dict
2014/08/29 Python
Python实现程序的单一实例用法分析
2015/06/03 Python
Python编程实现双链表,栈,队列及二叉树的方法示例
2017/11/01 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
pandas如何处理缺失值
2019/07/31 Python
Python DataFrame一列拆成多列以及一行拆成多行
2019/08/06 Python
django连接oracle时setting 配置方法
2019/08/29 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
详解appium自动化测试工具(monitor、uiautomatorviewer)
2021/01/27 Python
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
协议书与合同的区别
2014/04/18 职场文书
广播体操比赛主持词
2015/06/29 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python
vue实现input输入模糊查询的三种方式
2022/08/14 Vue.js
Li list-style-image 图片垂直居中实现方法
2023/05/21 HTML / CSS