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 相关文章推荐
定义select的边框颜色
Apr 28 Javascript
Javascript selection的兼容性写法介绍
Dec 20 Javascript
jQuery 滑动方法slideDown向下滑动元素
Jan 16 Javascript
5款JavaScript代码压缩工具推荐
Jul 07 Javascript
Vue框架中正确引入JS库的方法介绍
Jul 30 Javascript
小程序tab页无法传递参数的方法
Aug 03 Javascript
用图片替换checkbox原始样式并实现同样的功能
Nov 15 Javascript
解决微信小程序scroll-view组件无横向滚动的问题
Feb 04 Javascript
ng-alain的sf如何自定义部件的流程
Jun 12 Javascript
vue中v-model对select的绑定操作
Aug 31 Javascript
详解Vue的七种传值方式
Feb 08 Vue.js
测量JavaScript函数的性能各种方式对比
Apr 27 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
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
一道关于php变量引用的面试题
2010/08/08 PHP
php类中private属性继承问题分析
2012/11/01 PHP
关于JSON以及JSON在PHP中的应用技巧
2013/11/27 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
PHP也能干大事 随机函数
2015/04/14 PHP
PHP检测链接是否存在的代码实例分享
2016/05/06 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
js中arguments,caller,callee,apply的用法小结
2014/01/28 Javascript
小巧强大的jquery layer弹窗弹层插件
2015/12/06 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
js事件处理程序跨浏览器解决方案
2016/03/27 Javascript
浅析location.href跨窗口调用函数
2016/11/22 Javascript
protractor的安装与基本使用教程
2017/07/07 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
在vue项目中引入vue-beauty操作方法
2019/02/11 Javascript
微信小程序时间戳转日期的详解
2019/04/30 Javascript
vue 引用自定义ttf、otf、在线字体的方法
2019/05/09 Javascript
vue+element创建动态的form表单及动态生成表格的行和列
2019/05/20 Javascript
layui自定义ajax左侧三级菜单
2019/07/26 Javascript
vue自定义switch开关组件,实现样式可自行更改
2019/11/01 Javascript
python+ffmpeg批量去视频开头的方法
2019/01/09 Python
django-crontab 定时执行任务方法的实现
2019/09/06 Python
简单介绍django提供的加密算法
2019/12/18 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
促销活动策划方案
2014/01/12 职场文书
企业年会主持词
2014/03/27 职场文书
农村文化建设标语
2014/10/07 职场文书
消防安全月活动总结
2015/05/08 职场文书
刑事法律意见书
2015/06/04 职场文书
高三毕业感言
2015/07/30 职场文书
大学生党课感想
2015/08/11 职场文书
基于python实现银行管理系统
2021/04/20 Python
Go结合Gin导出Mysql数据到Excel表格
2022/08/05 Golang