js实现身份证号码验证的简单实例
以下是根据身份证号码编码规则,使用JS对其进行有效性验证代码
IdCard-Validate.js代码如下:
/**
*身份证15位编码规则:ddddddyymmddxxp
*dddddd:地区码
*yymmdd:出生年月日
*xx:顺序类编码,无法确定
*p:性别,奇数为男,偶数为女
*<p/>
*身份证18位编码规则:ddddddyyyymmddxxxy
*dddddd:地区码
*yyyymmdd:出生年月日
*xxx:顺序类编码,无法确定,奇数为男,偶数为女
*y:校验码,该位数值可通过前17位计算获得
*<p/>
*18位号码加权因子为(从右到左)Wi=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1]
*验证位Y=[1,0,10,9,8,7,6,5,4,3,2]
*校验位计算公式:Y_P=mod(∑(Ai×Wi),11)
*i为身份证号码从右往左数的2...18位;Y_P为脚丫校验码所在校验码数组位置
*
*/
varWi=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1];//加权因子
varValideCode=[1,0,10,9,8,7,6,5,4,3,2];//身份证验证位值.10代表X
functionIdCardValidate(idCard){
idCard=trim(idCard.replace(//g,""));
if(idCard.length==15){
returnisValidityBrithBy15IdCard(idCard);
}elseif(idCard.length==18){
vara_idCard=idCard.split("");//得到身份证数组
if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){
returntrue;
}else{
returnfalse;
}
}else{
returnfalse;
}
}
/**
*判断身份证号码为18位时最后的验证位是否正确
*@parama_idCard身份证号码数组
*@return
*/
functionisTrueValidateCodeBy18IdCard(a_idCard){
varsum=0;//声明加权求和变量
if(a_idCard[17].toLowerCase()=="x"){
a_idCard[17]=10;//将最后位为x的验证码替换为10方便后续操作
}
for(vari=0;i<17;i++){
sum+=Wi[i]*a_idCard[i];//加权求和
}
valCodePosition=sum%11;//得到验证码所位置
if(a_idCard[17]==ValideCode[valCodePosition]){
returntrue;
}else{
returnfalse;
}
}
/**
*通过身份证判断是男是女
*@paramidCard15/18位身份证号码
*@return"female"-女、"male"-男
*/
functionmaleOrFemalByIdCard(idCard){
idCard=trim(idCard.replace(//g,""));//对身份证号码做处理。包括字符间有空格。
if(idCard.length==15){
if(idCard.substring(14,15)%2==0){
return"female";
}else{
return"male";
}
}elseif(idCard.length==18){
if(idCard.substring(14,17)%2==0){
return"female";
}else{
return"male";
}
}else{
returnnull;
}
// 可对传入字符直接当作数组来处理
//if(idCard.length==15){
//alert(idCard[13]);
//if(idCard[13]%2==0){
//return"female";
//}else{
//return"male";
//}
//}elseif(idCard.length==18){
//alert(idCard[16]);
//if(idCard[16]%2==0){
//return"female";
//}else{
//return"male";
//}
//}else{
//returnnull;
//}
}
/**
*验证18位数身份证号码中的生日是否是有效生日
*@paramidCard18位书身份证字符串
*@return
*/
functionisValidityBrithBy18IdCard(idCard18){
varyear= idCard18.substring(6,10);
varmonth=idCard18.substring(10,12);
varday=idCard18.substring(12,14);
vartemp_date=newDate(year,parseFloat(month)-1,parseFloat(day));
//这里用getFullYear()获取年份,避免千年虫问题
if(temp_date.getFullYear()!=parseFloat(year)
||temp_date.getMonth()!=parseFloat(month)-1
||temp_date.getDate()!=parseFloat(day)){
returnfalse;
}else{
returntrue;
}
}
/**
*验证15位数身份证号码中的生日是否是有效生日
*@paramidCard1515位书身份证字符串
*@return
*/
functionisValidityBrithBy15IdCard(idCard15){
varyear= idCard15.substring(6,8);
varmonth=idCard15.substring(8,10);
varday=idCard15.substring(10,12);
vartemp_date=newDate(year,parseFloat(month)-1,parseFloat(day));
//对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法
if(temp_date.getYear()!=parseFloat(year)
||temp_date.getMonth()!=parseFloat(month)-1
||temp_date.getDate()!=parseFloat(day)){
returnfalse;
}else{
returntrue;
}
}
//去掉字符串头尾空格
functiontrim(str){
returnstr.replace(/(^/s*)|(/s*$)/g,"");
}
对于上述代码中,关于性别的判断在实际使用中,可加入首先判断身份证是否有效。在本代码示例中并未进行该种判断,有点鸡肋的感觉,可在实际使用中根据情况进行丰满。
相关文章
- 【JS 逆向百例】猿人学系列 web 比赛第二题:js 混淆 - 动态 cookie,详细剖析
- 原生 JS 实现 HTML 转 Markdown,以及其实现逻辑(html2md.js 或 html2markdown.js)
- 使用JS连接MySQL数据库:实现化繁为简(js连接mysql数据库)
- 创建JS文件:在Linux下实现自动化任务(linux创建js文件)
- 数据JS技术实现实时获取Oracle数据(js实时获取oracle)
- PHP+JS无限级可伸缩菜单详解(简单易懂)
- ASP.NET中常用的用来输出JS脚本的类
- js对象之JS入门之Array对象操作小结
- 利用PHP+JS实现搜索自动提示(实例)
- JS实现简单的Canvas画图实例
- Js(JavaScript)中,弹出是或否的选择框示例(confirm用法的实例分析)
- js实现json数据行到列的转换的实例代码
- JS返回上一页实例代码通过图片和按钮分别实现
- JS实现字体选色板实例代码
- js实现单行文本向上滚动效果实例代码
- JS小功能(offsetLeft实现图片滚动效果)实例代码
- JS小功能(setInterval实现图片效果显示时间)实例代码
- JS关键字球状旋转效果的实例代码
- JS实现匀速运动的代码实例
- JS获取月的最后一天与JS得到一个月份最大天数的实例代码
- node.js中的socket.io入门实例
- node.js中使用node-schedule实现定时任务实例
- js正则表达式test()和exec()用法实例