基于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 相关文章推荐
function, new function, new Function之间的区别
Mar 08 Javascript
javascript encodeURI和encodeURIComponent的比较
Apr 03 Javascript
js中有关IE版本检测
Jan 04 Javascript
JS的replace方法介绍
Oct 20 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
Dec 02 Javascript
Enter回车切换输入焦点实现思路与代码兼容各大浏览器
Sep 01 Javascript
js获取元素的外链样式的简单实现方法
Jun 06 Javascript
微信小程序 教程之WXSS
Oct 18 Javascript
elementui的默认样式修改方法
Feb 23 Javascript
Webpack 4如何动态切割JS注入文件名详解
Jul 09 Javascript
vue2.0 解决抽取公用js的问题
Jul 31 Javascript
JS变量提升及函数提升实例解析
Sep 03 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
PHP5中MVC结构学习
2006/10/09 PHP
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
php计算函数执行时间的方法
2015/03/20 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
PHP两种实现无级递归分类的方法
2017/03/02 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
PDO::exec讲解
2019/01/28 PHP
javascript内存管理详细解析
2013/11/11 Javascript
JavaScript实现复制内容到粘贴板代码
2016/03/31 Javascript
JavaScript实现页面无操作倒计时退出
2016/10/22 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
BootStrap 页签切换失效的解决方法
2017/08/17 Javascript
基于js中的原型(全面讲解)
2017/09/19 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
微信小程序实现团购或秒杀批量倒计时
2020/11/01 Javascript
详解Vue前端生产环境发布配置实战篇
2019/05/07 Javascript
Antd的Table组件嵌套Table以及选择框联动操作
2020/10/24 Javascript
python获取android设备的GPS信息脚本分享
2015/03/06 Python
Python中用于返回绝对值的abs()方法
2015/05/14 Python
python实现简单聊天应用 python群聊和点对点均实现
2017/09/14 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
2017/09/18 Python
pandas计算最大连续间隔的方法
2019/07/04 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
python 求定积分和不定积分示例
2019/11/20 Python
上海方立数码笔试题
2013/10/18 面试题
安全生产先进个人材料
2014/02/06 职场文书
简单的项目建议书模板
2014/03/12 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
教务处干事工作总结
2015/08/14 职场文书
golang 如何通过反射创建新对象
2021/04/28 Golang
小程序自定义轮播图圆点组件
2022/06/25 Javascript