基于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 相关文章推荐
JS运行耗时操作的延时显示方法
Nov 19 Javascript
js 数据类型转换总结笔记
Jan 17 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
Sep 12 Javascript
使用javascript过滤html的字符串(注释标记法)
Jul 08 Javascript
javascript字母大小写转换的4个函数详解
May 09 Javascript
JS简单实现移动端日历功能示例
Dec 28 Javascript
jQuery阻止移动端遮罩层后页面滚动
Mar 15 Javascript
详解Javascript中new()到底做了些什么?
Mar 29 Javascript
从vue源码解析Vue.set()和this.$set()
Aug 30 Javascript
js之切换全屏和退出全屏实现代码实例
Sep 09 Javascript
vue实现鼠标移过出现下拉二级菜单功能
Dec 12 Javascript
JavaScript 禁止用户保存图片的实现代码
Apr 28 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
PHP中for循环语句的几种变型
2006/11/26 PHP
php单例模式实现方法分析
2015/03/14 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
关于PHP开发的9条建议
2015/07/27 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
php中的异常和错误浅析
2017/05/03 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
IE事件对象(The Internet Explorer Event Object)
2012/06/27 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
jquery实现可自动收缩的TAB网页选项卡代码
2015/09/06 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
2016/04/05 Javascript
js实现日历与定时器
2017/02/22 Javascript
基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式
2018/01/17 Javascript
使用vue-route 的 beforeEach 实现导航守卫(路由跳转前验证登录)功能
2018/03/22 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
Python的Flask框架应用调用Redis队列数据的方法
2016/06/06 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
python安装twisted的问题解析
2018/08/21 Python
法国奢华女性时尚配饰网上商店:Monnier Frères
2016/08/27 全球购物
Born鞋子官网:Born Shoes
2017/04/06 全球购物
自荐信包含哪些内容
2013/10/30 职场文书
全民健身日活动方案
2014/01/29 职场文书
代理班主任的自我评价
2014/02/04 职场文书
总经理司机岗位职责
2014/02/06 职场文书
yy生日主持词
2014/03/20 职场文书
学生会主席演讲稿
2014/04/25 职场文书
市场营销专业自荐书
2014/06/10 职场文书
教师演讲稿开场白
2014/08/25 职场文书
个人遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
专职安全员岗位职责
2015/04/11 职场文书
幼儿园辞职信
2015/05/13 职场文书
小王子读书笔记
2015/06/29 职场文书
DBCA命令行搭建Oracle ADG的流程
2021/06/11 Oracle