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 相关文章推荐
转一个日期输入控件,支持FF
Apr 27 Javascript
javascript 操作Word和Excel的实现代码
Oct 26 Javascript
url地址自动加#号问题说明
Aug 21 Javascript
JavaScript聚焦于第一个字段的代码
Oct 15 Javascript
div拖拽插件——JQ.MoveBox.js(自制JQ插件)
May 17 Javascript
JS中获取数据库中的值的方法
Jul 14 Javascript
浅谈javascript 迭代方法
Jan 21 Javascript
浅谈Cookie的生命周期问题
Aug 02 Javascript
利用JavaScript判断浏览器类型及版本
Aug 23 Javascript
layer弹出层自适应高度,垂直水平居中的实现
Sep 16 Javascript
vue - vue.config.js中devServer配置方式
Oct 30 Javascript
8个JS的reduce使用实例和reduce操作方式
Oct 05 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
PHP校验ISBN码的函数代码
2011/01/17 PHP
工厂模式在Zend Framework中应用介绍
2012/07/10 PHP
php常见的魔术方法详解
2014/12/25 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
php-beanstalkd消息队列类实例分享
2017/07/19 PHP
鼠标经过的文本框textbox变色
2009/05/21 Javascript
js 实现打印网页中定义的部分内容的代码
2010/04/01 Javascript
通过AJAX的JS、JQuery两种方式解析XML示例介绍
2013/09/23 Javascript
JS Canvas定时器模拟动态加载动画
2016/09/17 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
使用 node.js 模仿 Apache 小部分功能
2019/07/07 Javascript
深入理解令牌认证机制(token)
2019/08/22 Javascript
d3.js实现图形缩放平移
2019/12/19 Javascript
js+canvas实现简单扫雷小游戏
2021/01/22 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
星球大战与Python之间的那些事
2016/01/07 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
2019/03/30 Python
python flask解析json数据不完整的解决方法
2019/05/26 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
python @classmethod 的使用场合详解
2019/08/23 Python
python程序如何进行保存
2020/07/03 Python
python给list排序的简单方法
2020/12/10 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
详解CSS3中@media的实际使用
2015/08/04 HTML / CSS
马克华菲官方商城:Mark Fairwhale
2016/09/04 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
演讲稿怎么写
2014/01/07 职场文书
商场活动策划方案
2014/01/24 职场文书
优秀党员自我评价范文
2014/09/15 职场文书
信息合作协议书
2014/10/09 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
聊聊JS ES6中的解构
2021/04/29 Javascript
Python人工智能之混合高斯模型运动目标检测详解分析
2021/11/07 Python