基于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 相关文章推荐
mysql输出数据赋给js变量报unterminated string literal错误原因
May 22 Javascript
js 分页全选或反选标识实现代码
Aug 09 Javascript
jquery实现图片左右间隔滚动特效(可自动播放)
May 08 Javascript
基于jquery插件实现常见的幻灯片效果
Nov 01 Javascript
基于JS2Image实现圣诞树代码
Dec 24 Javascript
Vue.js每天必学之方法与事件处理器
Sep 06 Javascript
移动端脚本框架Hammer.js
Dec 15 Javascript
React Native如何消除启动时白屏的方法
Aug 08 Javascript
vue-router路由与页面间导航实例解析
Nov 07 Javascript
详解用JS添加和删除class类名
Mar 25 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
Sep 17 Javascript
ECharts transform数据转换和dataZoom在项目中使用
Dec 24 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/10/09 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
Windows下PHP开发环境搭建教程(Apache+PHP+MySQL)
2016/06/13 PHP
PHP实现的日历功能示例
2018/09/01 PHP
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
js中判断变量类型函数typeof的用法总结
2016/08/09 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
AngularJs 最新验证手机号码的实例,成功测试通过
2017/11/26 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
过滤器vue.filters的使用方法实现
2019/09/18 Javascript
node使用mysql获取数据库数据中文乱码问题的解决
2019/12/02 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
[00:33]2016完美“圣”典风云人物:BurNIng宣传片
2016/12/10 DOTA
Python处理Excel文件实例代码
2017/06/20 Python
Python实现比较扑克牌大小程序代码示例
2017/12/06 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
python实现Pyecharts实现动态地图(Map、Geo)
2020/03/25 Python
Python如何操作office实现自动化及win32com.client的运用
2020/04/01 Python
keras自定义回调函数查看训练的loss和accuracy方式
2020/05/23 Python
阿拉伯世界最大的电子卖场:Souq埃及
2016/08/01 全球购物
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
西班牙最大的婴儿用品网上商店:Bebitus
2019/05/30 全球购物
电子商务自荐书范文
2014/01/04 职场文书
一年级家长会邀请函
2014/01/25 职场文书
劳动竞赛活动总结
2014/05/05 职场文书
预防传染病方案
2014/06/14 职场文书
党委书记个人对照检查材料
2014/09/15 职场文书
红旗渠导游词
2015/02/09 职场文书
2015年安康杯竞赛活动总结
2015/03/26 职场文书
2015年推普周活动方案
2015/05/06 职场文书
2016年校长新年寄语
2015/08/17 职场文书
个人的事迹材料怎么写
2019/04/24 职场文书