基于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不同页面传值的改进版
Sep 30 Javascript
基于Jquery的温度计动画效果
Jun 18 Javascript
js中符号转意问题示例探讨
Aug 19 Javascript
window.returnValue使用方法示例介绍
Jul 03 Javascript
Javascript基础教程之数据类型 (布尔型 Boolean)
Jan 18 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
js贪吃蛇游戏实现思路和源码
Apr 14 Javascript
使用React实现轮播效果组件示例代码
Sep 05 Javascript
集成vue到jquery/bootstrap项目的方法
Feb 10 jQuery
JS求1到任意数之间的所有质数的方法详解
May 20 Javascript
Vue页面切换和a链接的本质区别详解
Nov 12 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
May 07 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中读写文件实现代码
2011/10/20 PHP
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
php表单提交实例讲解
2015/11/12 PHP
PHP数组常用函数实例小结
2018/08/20 PHP
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
自己整理的一个javascript日期处理函数
2010/10/16 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
2014/06/30 Javascript
JS扩展方法实例分析
2015/04/15 Javascript
JS实现当前页居中分页效果的方法
2015/06/18 Javascript
IE浏览器下PNG相关功能
2015/07/05 Javascript
javascript常用函数(1)
2015/11/04 Javascript
使用伪命名空间封装保护独自创建的对象方法
2016/08/04 Javascript
canvas雪花效果核心代码分享
2017/02/19 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
jQuery dateRangePicker插件使用方法详解
2017/07/28 jQuery
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
解决vue router组件状态刷新消失的问题
2018/08/01 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
js轮播图之旋转木马效果
2020/10/13 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
python使用三角迭代计算圆周率PI的方法
2015/03/20 Python
python更改已存在excel文件的方法
2018/05/03 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
基于pytorch 预训练的词向量用法详解
2020/01/06 Python
Pytorch 实现数据集自定义读取
2020/01/18 Python
白俄罗斯女装和针织品网上商店:Presli.by
2019/10/13 全球购物
报关简历自我评价怎么写
2013/09/19 职场文书
20年同学聚会感言
2014/02/03 职场文书
休假证明书
2015/06/24 职场文书
九年级化学教学反思
2016/02/22 职场文书
工人先锋号事迹材料(2016精选版)
2016/03/01 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
Python必备技巧之字符数据操作详解
2022/03/23 Python