千家信息网

怎么用JavaScript正则表达式验证身份证号码是否合法

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章主要介绍"怎么用JavaScript正则表达式验证身份证号码是否合法",在日常操作中,相信很多人在怎么用JavaScript正则表达式验证身份证号码是否合法问题上存在疑惑,小编查阅了各式资料,
千家信息网最后更新 2024年11月22日怎么用JavaScript正则表达式验证身份证号码是否合法

这篇文章主要介绍"怎么用JavaScript正则表达式验证身份证号码是否合法",在日常操作中,相信很多人在怎么用JavaScript正则表达式验证身份证号码是否合法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么用JavaScript正则表达式验证身份证号码是否合法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

第一种方法:

在用户注册页面有些需求要求的比较严格,需要对身份证js验证是否合法,通过此功能严格此系统软件,从而过滤到很多水客。下面就此实现方法给大家讲解下。

  很多时候我们都是通过一组正则表达式来判断用户输入的身份证是否合法,那在用正则表达式判断之前,你对身份证号的组成有多少了解呢?下面来说说一个身份证号里面包含了多少的信息:

  1、号码的结构

    公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

  2、地址码(前六位数)

    表示编码对象常住户口所在县(市、旗、区)的行政区划代码,按gb/T2260的规定执行。

  3、出生日期码(第七位至十四位)

    表示编码对象出生的年、月、日,按gb/T7408的规定执行,年、月、日代码之间不用分隔符。

  4、顺序码(第十五位至十七位)

    表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

  5、校验码(第十八位数)

    作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,如果某人的尾号是0-9,都不会出现X,但如果尾号是10,那么就得用X来代替,因为如果用10做尾号,那么 此人的身份证就变成了19位。X是罗马数字的10,用X来代替10,可以保证公民的身份证符合国家标准。

  在知道身份证号结构组成各部分的意思后,我们开始进入主题:

  1、定义一个全国地区的对象

var aCity={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:"国外"}

  2、正则表达式判断

function isCardID(sId){ var iSum=0 ; var info="" ; if(!/^\d{17}(\d|x)$/i.test(sId)) return "你输入的身份证长度或格式错误"; sId=sId.replace(/x$/i,"a"); if(aCity[parseInt(sId.substr(0,2))]==null) return "你的身份证地区非法"; sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2)); var d=new Date(sBirthday.replace(/-/g,"/")) ; if(sBirthday!=(d.getFullYear()+"-"+ (d.getMonth()+1) + "-" + d.getDate()))return "身份证上的出生日期非法"; for(var i = 17;i>=0;i --) iSum += (Math.pow(2,i) % 11) * parseInt(sId.charAt(17 - i),11) ; if(iSum!=1) return "你输入的身份证号非法"; //aCity[parseInt(sId.substr(0,2))]+","+sBirthday+","+(sId.substr(16,1)%2?"男":"女");//此次还可以判断出输入的身份证号的人性别 return true;}

第二种方法:

function scCard(){  var scType=document.getElementById("sc_card_type").value;  if(scType=="1"){   var scCard=document.getElementById("sc_card_num").value;       if(scCard.length!=0){       if(!checkCard(scCard)){       $("#errorTips").html("身份证号码格式错误");       }else{       $("#errorTips").html("");       }       }  }  return false;  }  //function checkidno(obj) {   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:"国外"    };  checkCard = function(obj)  {   //var card = document.getElementById('card_no').value;   //是否为空   // if(card === '')   // {   //  return false;   //}   //校验长度,类型   if(isCardNo(obj) === false)   {    return false;   }   //检查省份   if(checkProvince(obj) === false)   {    return false;   }   //校验生日   if(checkBirthday(obj) === false)   {    return false;   }   //检验位的检测   if(checkParity(obj) === false)   {    return false;   }   return true;  };  //检查号码是否符合规范,包括长度,类型  isCardNo = function(obj)  {   //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X   var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;   if(reg.test(obj) === false)   {    return false;   }   return true;  };  //取身份证前两位,校验省份  checkProvince = function(obj)  {   var province = obj.substr(0,2);   if(vcity[province] == undefined)   {    return false;   }   return true;  };  //检查生日是否正确  checkBirthday = function(obj)  {   var len = obj.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 = obj.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 = obj.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;  };  //校验日期  verifyBirthday = function(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 >= 0 && time <= 130)    {     return true;    }    return false;   }   return false;  };  //校验位的检测  checkParity = function(obj)  {   //15位转18位   obj = changeFivteenToEighteen(obj);   var len = obj.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 += obj.substr(i, 1) * arrInt[i];    }    valnum = arrCh[cardTemp % 11];    if (valnum == obj.substr(17, 1))    {     return true;    }    return false;   }   return false;  };  //15位转18位身份证号  changeFivteenToEighteen = function(obj)  {   if(obj.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;     obj = obj.substr(0, 6) + '19' + obj.substr(6, obj.length - 6);    for(i = 0; i < 17; i ++)    {     cardTemp += obj.substr(i, 1) * arrInt[i];    }    obj += arrCh[cardTemp % 11];    return obj;   }   return obj;  };

到此,关于"怎么用JavaScript正则表达式验证身份证号码是否合法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

身份 身份证 号码 数字 正则 表达式 合法 证号 验证 顺序 尾号 方法 日期 学习 输入 位数 对象 长度 检查 黑龙 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器管理口web进不去怎么办 c数据库入门经典 pdf 电脑办公用什么服务器 网络安全linux代码 网络安全技术和应用专业好不好 es文件管理器搭建服务器 九阴真经缘定三生是哪里服务器 在处理我们的社交网络技术时 网络安全什么是数字签名 烟草行业网络安全注意事项 用手机访问数据库 做一个集合类学生数据库 服务器换下来的固态还能接着用吗 H3C服务器硬盘数据清除 机房的服务器锁号是什么 50岁还能做软件开发吗 我的世界服务器地址怎么登陆 移动ui设计用的软件开发 词库下载软件开发 江苏嵌入式软件开发哪家实惠 网络安全叠加区块链 校园网络安全简报范文 如何搭建缓存服务器 北京大学网络安全考研 苹果id服务器出错是什么回事 软件开发行业前景怎样 服务器总是登录不上怎么解决 app软件开发专业公司 长春亚飞软件开发有限公司 数据库主键和外检
0