基于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中的undefined学习总结
Nov 30 Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
Jul 28 Javascript
JQuery分屏指示器图片轮换效果实例
May 21 Javascript
JS中的forEach、$.each、map方法推荐
Apr 05 Javascript
jQuery查看选中对象HTML代码的方法
Jun 17 Javascript
Angular多选、全选、批量选择操作实例代码
Mar 10 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
May 21 jQuery
angular 表单验证器验证的同时限制输入的实现
Apr 11 Javascript
jquery分页优化操作实例分析
Aug 23 jQuery
微信sdk实现禁止微信分享(使用原生php实现)
Nov 15 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
Apr 08 Javascript
使用 JavaScript 制作页面效果
Apr 21 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基础知识:控制结构
2006/12/13 PHP
PHP垃圾回收机制引用计数器概念分析
2013/06/24 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
PHP设计模式之观察者模式定义与用法示例
2018/08/04 PHP
大家未必知道的Js技巧收藏
2008/04/07 Javascript
jQuery技巧总结
2011/01/01 Javascript
javascript实现画不相交的圆
2015/04/07 Javascript
jquery动态增加删减表格行特效
2015/11/20 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
JS实现图片上传预览功能
2016/11/21 Javascript
jQuery实现拖拽可编辑模块功能代码
2017/01/12 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
JavaScript中使用参数个数实现重载功能
2017/09/01 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
vue跳转同一个组件,参数不同,页面接收值只接收一次的解决方法
2019/11/05 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
简介Python设计模式中的代理模式与模板方法模式编程
2016/02/02 Python
Python实现简单的语音识别系统
2017/12/13 Python
Flask入门之上传文件到服务器的方法示例
2018/07/18 Python
python实现剪切功能
2019/01/23 Python
我喜欢你 抖音表白程序python版
2019/04/07 Python
python按行读取文件并找出其中指定字符串
2019/08/08 Python
Python 如何批量更新已安装的库
2020/05/26 Python
高二美术教学反思
2014/01/14 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
保险内勤岗位职责
2014/04/05 职场文书
公司授权委托书格式范文
2014/10/02 职场文书
2014年秘书工作总结
2014/11/25 职场文书
红色故事汇观后感
2015/06/18 职场文书
《蚂蚁和蝈蝈》教学反思
2016/02/22 职场文书
vue实现Toast组件轻提示
2022/04/10 Vue.js
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL