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插件制作 自增长输入框实现代码
Aug 17 jQuery
如何编写jquery插件
Mar 29 jQuery
jquery 禁止鼠标右键并监听右键事件
Apr 27 jQuery
jQuery+Ajax实现用户名重名实时检测
Jun 01 jQuery
jquery中done和then的区别(详解)
Dec 19 jQuery
CSS3结合jQuery实现动画效果及回调函数的实例
Dec 27 jQuery
JQuery Ajax动态加载Table数据的实例讲解
Aug 09 jQuery
解决jquery有正确返回值但不执行success函数的问题
Aug 20 jQuery
jQuery擦除插件eraser使用方法详解
Jan 11 jQuery
jQuery cookie的公共方法封装和使用示例
Jun 01 jQuery
jQuery实现日历效果
Sep 11 jQuery
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 01 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中memcache 基本操作实例
2015/05/17 PHP
PHP如何将log信息写入服务器中的log文件
2015/07/29 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
PHP实现断点续传乱序合并文件的方法
2018/09/06 PHP
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
js怎么判断flash swf文件是否加载完毕
2014/08/14 Javascript
纯JavaScript实现的兼容各浏览器的添加和移除事件封装
2015/03/28 Javascript
jQuery实现倒计时重新发送短信验证码功能示例
2017/01/12 Javascript
vue 使用ref 让父组件调用子组件的方法
2018/02/08 Javascript
vue展示dicom文件医疗系统的实现代码
2018/08/27 Javascript
Vue CLI3创建项目部署到Tomcat 使用ngrok映射到外网
2019/05/16 Javascript
Vue实现 点击显示再点击隐藏效果(点击页面空白区域也隐藏效果)
2020/01/16 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
Python文件操作,open读写文件,追加文本内容实例
2016/12/14 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
Pycharm更换python解释器的方法
2018/10/29 Python
对python pandas 画移动平均线的方法详解
2018/11/28 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
python 字典操作提取key,value的方法
2019/06/26 Python
Python 根据数据模板创建shapefile的实现
2019/11/26 Python
python框架Django实战商城项目之工程搭建过程图文详解
2020/03/09 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
自立自强的名人事例
2014/02/10 职场文书
竞争上岗实施方案
2014/03/21 职场文书
《秋游》教学反思
2014/04/24 职场文书
应届大专生自荐书
2014/06/16 职场文书
股份转让协议书范本
2015/01/27 职场文书
PHP设计模式(观察者模式)
2021/07/07 PHP
深入浅析Django MTV模式
2021/09/04 Python
Python 数据结构之十大经典排序算法一文通关
2021/10/16 Python
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技