基于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 相关文章推荐
JavaScript中的Array对象使用说明
Jan 17 Javascript
JS判断数组中是否有重复值得三种实用方法
Aug 16 Javascript
jquery中表单 多选框的一种巧妙写法
Sep 06 Javascript
jquery实现简单的banner轮播效果【实例】
Mar 30 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
Oct 14 Javascript
jQuery实现加入收藏夹功能(主流浏览器兼职)
Dec 24 Javascript
Angular2学习教程之ng中变更检测问题详解
May 28 Javascript
iview table render集成switch开关的实例
Mar 14 Javascript
Node批量爬取头条视频并保存方法
Sep 20 Javascript
JS简单判断是否在微信浏览器打开的方法示例
Jan 08 Javascript
小程序自定义模板实现吸顶功能
Jan 08 Javascript
vue项目,代码提交至码云,iconfont的用法说明
Jul 30 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
使用PHP Socket 编程模拟Http post和get请求
2014/11/25 PHP
3种方法轻松处理php开发中emoji表情的问题
2016/07/18 PHP
JavaScript的面向对象(二)
2006/11/09 Javascript
js 动态选中下拉框
2009/11/26 Javascript
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
JS完整获取IE浏览器信息包括类型、版本、语言等等
2014/05/22 Javascript
Javascript实现简单二级下拉菜单实例
2014/06/15 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
JSONObject使用方法详解
2015/12/17 Javascript
值得分享的轻量级Bootstrap Table表格插件
2016/05/30 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
使用next.js开发网址缩短服务的方法
2020/06/17 Javascript
[01:07:13]TNC vs Pain 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
python3实现域名查询和whois查询功能
2018/06/21 Python
对Pandas MultiIndex(多重索引)详解
2018/11/16 Python
Python 常用模块 re 使用方法详解
2019/06/06 Python
python安装本地whl的实例步骤
2019/10/12 Python
判断Threading.start新线程是否执行完毕的实例
2020/05/02 Python
Python实现一个简单的毕业生信息管理系统的示例代码
2020/06/08 Python
英国护发和美妆在线商店:Klip Shop
2019/03/24 全球购物
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
介绍一下linux的文件系统
2012/03/20 面试题
葡萄牙语专业个人求职信
2013/12/10 职场文书
上级检查欢迎词
2014/01/18 职场文书
酒店拾金不昧表扬信
2014/01/18 职场文书
学生违反校规检讨书
2014/10/28 职场文书
2015年保洁员工作总结
2015/05/04 职场文书
2016年春季运动会通讯稿
2015/11/25 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
mysql外连接与内连接查询的不同之处
2021/06/03 MySQL
python单元测试之pytest的使用
2021/06/07 Python
JavaScript圣杯布局与双飞翼布局实现案例详解
2022/08/05 Javascript
HttpClient实现表单提交上传文件
2022/08/14 Java/Android