基于javascript简单实现对身份证校验


Posted in Javascript onJanuary 25, 2021

本文实例介绍了javascript简单实现对身份证的校验的关键性代码,分享给大家供大家参考,具体内容如下

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:"国外" 
}; 

checkCard = function(card) 
{ 

//是否为空 
if(card === '') 
{ 

return "请输入身份证号,身份证号不能为空"; 
} 
//校验长度,类型 
if(isCardNo(card) === false) 
{ 

return "您输入的身份证号码不正确,请重新输入"; 
} 
//检查省份 
if(checkProvince(card) === false) 
{ 
return "您输入的身份证号码不正确,请重新输入"; 
} 
//校验生日 
if(checkBirthday(card) === false) 
{ 
return "您输入的身份证号码生日不正确,请重新输入"; 
} 
//检验位的检测 
if(checkParity(card) === false) 
{ 
return "您的身份证校验位不正确,请重新输入"; 
} 

return "ok"; 
}; 


//检查号码是否符合规范,包括长度,类型 
isCardNo = function(card) 
{ 
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X 
var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/; 
if(reg.test(card) === false) 
{ 
return false; 
} 

return true; 
}; 

//取身份证前两位,校验省份 
checkProvince = function(card) 
{ 
var province = card.substr(0,2); 
if(vcity[province] == undefined) 
{ 
return false; 
} 
return true; 
}; 

//检查生日是否正确 
checkBirthday = function(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; 
}; 

//校验日期 
verifyBirthday = function(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; 
}; 

//校验位的检测 
checkParity = function(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位身份证号 
changeFivteenToEighteen = function(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; 
};

以上就是本文的全部内容,希望对大家实现javascript身份证校验有所帮助。

Javascript 相关文章推荐
模拟select的代码
Oct 19 Javascript
防止浏览器记住用户名及密码的简单实用方法
Apr 22 Javascript
jquery实现弹出窗口效果的实例代码
Nov 28 Javascript
jquery常用特效方法使用示例
Apr 25 Javascript
详解js闭包
Sep 02 Javascript
javascript的正则匹配方法学习
Feb 24 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
Jun 08 Javascript
JavaScript基础重点(必看)
Jul 09 Javascript
node操作mysql数据库实例详解
Mar 17 Javascript
JavaScript实现打地鼠小游戏
Apr 23 Javascript
layui实现下拉复选功能的例子(包括数据的回显与上传)
Sep 24 Javascript
JS实现音乐导航特效
Jan 06 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
Feb 17 #Javascript
Bootstrap布局组件应用实例讲解
Feb 17 #Javascript
深入php面向对象、模式与实践
Feb 16 #Javascript
三个js循环的关键字示例(for与while)
Feb 16 #Javascript
解析Node.js异常处理中domain模块的使用方法
Feb 16 #Javascript
jQuery Timelinr实现垂直水平时间轴插件(附源码下载)
Feb 16 #Javascript
深入浅析AngularJS和DataModel
Feb 16 #Javascript
You might like
使用 php4 加速 web 传输
2006/10/09 PHP
文件系统基本操作类
2006/11/23 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
php实现paypal 授权登录
2015/05/28 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
2016/04/26 PHP
[原创]php使用curl判断网页404(不存在)的方法
2016/06/23 PHP
PHP crc32()函数讲解
2019/02/14 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
js函数模拟显示桌面.scf程序示例
2014/04/20 Javascript
JS实现可缩放、拖动、关闭和最小化的浮动窗口完整实例
2015/03/04 Javascript
javascript执行环境及作用域详解
2016/05/05 Javascript
BootStrap glyphicon图标无法显示的解决方法
2016/09/06 Javascript
树结构之JavaScript
2017/01/24 Javascript
JavaScript函数节流和函数防抖之间的区别
2017/02/15 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
jQuery操作动画完整实例分析
2020/01/10 jQuery
uniapp实现横向滚动选择日期
2020/10/21 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
使用js原生实现年份轮播选择效果实例
2021/01/12 Javascript
python中的json总结
2018/10/11 Python
在Python中获取两数相除的商和余数方法
2018/11/10 Python
Python 实现PS滤镜的旋涡特效
2020/12/03 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
西铁城美国官方网站:Citizen Watch美国
2019/11/08 全球购物
中考冲刺决心书
2014/03/11 职场文书
大学生个人求职信
2014/06/02 职场文书
劳动竞赛口号
2014/06/16 职场文书
入党积极分子十八届四中全会思想汇报
2014/10/23 职场文书
检讨书大全
2015/01/27 职场文书
2015年妇女工作总结
2015/05/14 职场文书
幼儿园六一主持词开场白
2015/05/28 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
解析MySQL索引的作用
2022/03/03 MySQL