javascript实现验证身份证号的有效性并提示


Posted in Javascript onApril 30, 2015

javascript实现验证身份证号的有效性并提示

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 相关文章推荐
不错的新闻标题颜色效果
Dec 10 Javascript
jquery text()要注意啦
Oct 30 Javascript
javascript 验证日期的函数
Mar 18 Javascript
JavaScript中的稀疏数组与密集数组[译]
Sep 17 Javascript
浮动的div自适应居中显示的js代码
Dec 23 Javascript
Prototype框架详解
Nov 25 Javascript
JavaScript快速切换繁体中文和简体中文的方法及网站支持简繁体切换的绝招
Mar 07 Javascript
ES6中如何使用Set和WeakSet
Mar 10 Javascript
第二篇Bootstrap起步
Jun 21 Javascript
webstorm添加vue.js支持的方法教程
Jul 05 Javascript
jQuery列表检索功能实现代码
Jul 17 jQuery
解决修复npm安装全局模块权限的问题
May 17 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
Apr 30 #Javascript
jquery实现键盘左右翻页特效
Apr 30 #Javascript
jquery Validation表单验证使用详解
Sep 12 #Javascript
jQuery实现企业网站横幅焦点图切换功能实例
Apr 30 #Javascript
JS实现动态移动层及拖动浮层关闭的方法
Apr 30 #Javascript
javascript实时获取鼠标坐标值并显示的方法
Apr 30 #Javascript
javascript实现鼠标拖动改变层大小的方法
Apr 30 #Javascript
You might like
香妃
2021/03/03 冲泡冲煮
一步一步学习PHP(2)――PHP类型
2010/02/15 PHP
php使用ob_start()实现图片存入变量的方法
2014/11/14 PHP
php编程每天必学之验证码
2016/03/03 PHP
php变量与数组相互转换的方法(extract与compact)
2016/12/02 PHP
thinkphp5.1框架中容器(Container)和门面(Facade)的实现方法分析
2019/08/05 PHP
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
javascript 运算数的求值顺序
2011/08/23 Javascript
网页中可关闭的漂浮窗口实现可自行调节
2013/08/20 Javascript
jQuery实现渐变弹出层和弹出菜单的方法
2015/02/20 Javascript
JavaScript实现的简单幂函数实例
2015/04/17 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
微信小程序 label 组件详解及简单实例
2017/01/10 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
vue跨域解决方法
2017/10/15 Javascript
webpack dll打包重复问题优化的解决
2018/10/10 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
Python ljust rjust center输出
2008/09/06 Python
python生成日历实例解析
2014/08/21 Python
Python中下划线的使用方法
2015/03/27 Python
Python中用post、get方式提交数据的方法示例
2017/09/22 Python
Flask框架钩子函数功能与用法分析
2019/08/02 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
2019/12/03 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
python软件都是免费的吗
2020/06/18 Python
HTML5 manifest离线缓存的示例代码
2018/08/08 HTML / CSS
英国最红的高街时尚品牌:Topshop
2016/08/05 全球购物
Made in Design德国:设计师家具、灯具和装饰
2019/10/31 全球购物
银行竞聘上岗演讲稿
2014/09/12 职场文书
3.15消费者权益日活动总结
2015/02/09 职场文书
少年犯观后感
2015/06/11 职场文书
医院见习总结
2015/06/24 职场文书
go:垃圾回收GC触发条件详解
2021/04/24 Golang
python​格式化字符串
2022/04/20 Python