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 相关文章推荐
jQuery学习笔记之Helloworld
Dec 22 Javascript
Jquery知识点二 jquery下对数组的操作
Jan 15 Javascript
jquery专业的导航菜单特效代码分享
Aug 29 Javascript
自动化测试读写64位操作系统的注册表
Aug 15 Javascript
JavaScript中如何判断一个值的类型
Sep 15 Javascript
phantomjs导出html到pdf的方法总结
Oct 19 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
Aug 27 Javascript
vue基于element的区间选择组件
Sep 07 Javascript
jQuery easyui datagird编辑行删除行功能的实现代码
Sep 20 jQuery
基于vue写一个全局Message组件的实现
Aug 15 Javascript
如何检测JavaScript中的死循环示例详解
Aug 30 Javascript
el-table表头根据内容自适应完美解决表头错位和固定列错位
Jan 07 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提示Cannot modify header information - headers already sent by解决方法
2014/09/22 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
js控制分页打印、打印分页示例
2014/02/08 Javascript
JS清除字符串中重复值的实现方法
2016/08/03 Javascript
D3.js实现文本的换行详解
2016/10/14 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
浅谈Vue-cli 命令行工具分析
2017/11/22 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
Vue 换肤的示例实践
2018/01/23 Javascript
js+html实现点名系统功能
2019/11/05 Javascript
[39:53]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第一场 11.19
2020/11/19 DOTA
[28:07]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第二场 12.13
2020/12/17 DOTA
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
pandas 将索引值相加的方法
2018/11/15 Python
使用celery执行Django串行异步任务的方法步骤
2019/06/06 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
使用keras实现非线性回归(两种加激活函数的方式)
2020/07/05 Python
Python 串口通信的实现
2020/09/29 Python
matplotlib交互式数据光标mpldatacursor的实现
2021/02/03 Python
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
英国书籍、CD、DVD和游戏的第一道德零售商:Awesome Books
2020/02/22 全球购物
小学一年级评语大全
2014/04/22 职场文书
诚信的演讲稿范文
2014/05/12 职场文书
小学家长学校培训材料
2014/08/24 职场文书
公司离职证明样本
2014/09/13 职场文书
税务职业生涯规划书范文
2014/09/16 职场文书
六查六看自查报告
2014/10/14 职场文书
教师群众路线学习心得体会
2014/11/04 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书