js验证身份证号有效性并提示对应信息


Posted in Javascript onOctober 19, 2015

直接上代码,逐行对代码进行研究,一定会有所收获。

function nunber(allowancePersonValue){ 
 if(allowancePersonValue=="身份证号"){ 
 $("#span_username").show(); 
 $("#span_username").html("身份证号不能为空"); 
 return false; 
 } 
 //校验长度,类型 
 else if(isCardNo(allowancePersonValue) === false) 
 { 
$("#span_username").show(); 
 $("#span_username").html("您输入的身份证号码不正确,请重新输入"); 
 return false; 
 } 
 //检查省份 
 else if(checkProvince(allowancePersonValue) === false) 
 { 
 $("#span_username").show(); 
 $("#span_username").html("您输入的身份证号码不正确,请重新输入"); 
 return false; 
 } 
 //校验生日 
 else if(checkBirthday(allowancePersonValue) === false) 
 { 
 $("#span_username").show(); 
 $("#span_username").html("您输入的身份证号码生日不正确,请重新输入"); 
 return false; 
 } 
 //检验位的检测 
 else if(checkParity(allowancePersonValue) === false) 
 { 
 $("#span_username").show(); 
 $("#span_username").html("您的身份证校验位不正确,请重新输入"); 
 return false; 
 }else{ 
 $("#span_username").hide(); 
 return true; 
 } 
 
} 
 
//身份证省的编码 
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 isCardNo(card){ 
 //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X 
 var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/; 
 if(reg.test(card) === false){ 
 //alert("demo"); 
 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; 
}

使用方法:

<input type="text" class="reg_txt" value="身份证号" titles="请输入您的身份证号!" name="userid" id="username" maxlength="40" onfocus="if(this.value=='身份证号'){this.value='';}" onblur="if(this.value==''){this.value='身份证号';}nunber(this.value);" style="border: 1px solid red;"><br> 
<span class="c_red" id="span_username"></span>

希望本文对大家学习javascript程序设计有所帮助。

Javascript 相关文章推荐
一些常用的JS功能函数(2009-06-04更新)
Jun 04 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
Sep 10 Javascript
php图像生成函数之间的区别分析
Dec 06 Javascript
jQuery文本框(input textare)事件绑定方法教程
Apr 24 Javascript
JavaScript根据CSS的Media Queries来判断浏览设备的方法
May 10 Javascript
利用JS实现数字增长
Jul 28 Javascript
javascript宿主对象之window.navigator详解
Sep 07 Javascript
Vue仿手机qq的实例代码(demo)
Sep 08 Javascript
vue-cli webpack2项目打包优化分享
Feb 07 Javascript
Vue中computed与methods的区别详解
Mar 24 Javascript
微信小程序非跳转式组件授权登录的方法示例
May 22 Javascript
keep-alive保持组件状态的方法
Dec 02 Javascript
详解JavaScript数组的操作大全
Oct 19 #Javascript
全系IE支持Bootstrap的解决方法
Oct 19 #Javascript
JS+CSS实现分类动态选择及移动功能效果代码
Oct 19 #Javascript
谈谈Jquery中的children find 的区别有哪些
Oct 19 #Javascript
JS实现的简洁纵向滑动菜单(滑动门)效果
Oct 19 #Javascript
JS实现的左侧竖向滑动菜单效果代码
Oct 19 #Javascript
jQuery实现ctrl+enter(回车)提交表单
Oct 19 #Javascript
You might like
世界第一个无线广播电台 KDKA
2021/03/01 无线电
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
php 不使用js实现页面跳转
2014/02/11 PHP
php获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP中大于2038年时间戳的问题处理方案
2015/03/03 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
Smarty变量用法详解
2016/05/11 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
php实现的表单验证类完整示例
2019/08/13 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
Prototype Template对象 学习
2009/07/19 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
js解决弹窗问题实现班级跳转DIV示例
2014/01/06 Javascript
Nodejs全栈框架StrongLoop推荐
2014/11/09 NodeJs
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
JS组件Bootstrap实现弹出框和提示框效果代码
2015/12/08 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
基于JS实现数字动态变化显示效果附源码
2019/07/18 Javascript
jQuery Raty星级评分插件使用方法实例分析
2019/11/25 jQuery
Tornado服务器中绑定域名、虚拟主机的方法
2014/08/22 Python
python从sqlite读取并显示数据的方法
2015/05/08 Python
用Python计算三角函数之acos()方法的使用
2015/05/15 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
pytorch 自定义参数不更新方式
2020/01/06 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
基于Python下载网络图片方法汇总代码实例
2020/06/24 Python
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
雅虎笔试题(字符串操作)
2015/03/24 面试题
外贸实习生自荐信范文
2013/11/24 职场文书
咖啡店创业计划书范文
2014/09/15 职场文书
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL