js判断身份证号是否正确
2016-07-26 18:52
393 查看
js判断身份证号是否正确(包括15位,和18位身份证号码验证)
将15位身份证号码转成18位
function upCardID15(cardID15){
var v = [2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7];
var vs = "10X98765432";
//将15位的号码转换位17位
var cardID17 = cardID15.substring(0,6)+"19"+cardID15.substring(6);
var N = 0;
var R = -1;
var T = '0';//储存最后一个数字
var j = 0;
var cardID18="";
//计数出第18位数字
for(var i=16;i>=0;i--){
N += parseInt(cardID17.substring(i, i + 1)) * v[j];
j++;
}
R = N % 11;
T = vs.charAt(R);
cardID18 = cardID17 + T;
return cardID18;
}
/***身份证号码验证start**/ // 加权因子 var Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 ]; // 身份证验证位值.10代表X var ValideCode = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]; function IdCardValidate(idCard) { idCard = idCard.trim(); //去掉字符串头尾空格 if (idCard.length == 15) { return isValidityBrithBy15IdCard(idCard); //进行15位身份证的验证 } else if (idCard.length == 18) { var a_idCard = idCard.split(""); // 得到身份证数组 if(isValidityBrithBy18IdCard(idCard)&&isTrueValidateCodeBy18IdCard(a_idCard)){ //进行18位身份证的基本验证和第18位的验证 return true; }else { return false; } } else { return false; } } /**判断身份证号码为18位时最后的验证位是否正确**/ function isTrueValidateCodeBy18IdCard(a_idCard) { var sum = 0; // 声明加权求和变量 if (a_idCard[17].toLowerCase() == 'x') { a_idCard[17] = 10; // 将最后位为x的验证码替换为10方便后续操作 } for ( var i = 0; i < 17; i=i+1) { sum += Wi[i] * a_idCard[i]; // 加权求和 } valCodePosition = sum % 11; // 得到验证码所位置 if (a_idCard[17] == ValideCode[valCodePosition]) { return true; } else { return false; } } /***验证18位数身份证号码中的生日是否是有效生日**/ function isValidityBrithBy18IdCard(idCard18){ var year = idCard18.substring(6,10); var month = idCard18.substring(10,12); var day = idCard18.substring(12,14); var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day)); // 这里用getFullYear()获取年份,避免千年虫问题 if(temp_date.getFullYear()!=parseFloat(year) ||temp_date.getMonth()!=parseFloat(month)-1 ||temp_date.getDate()!=parseFloat(day)){ return false; }else{ return true; } } /***验证15位数身份证号码中的生日是否是有效生日**/ function isValidityBrithBy15IdCard(idCard15){ var cArr = idCard15.match(/^[0-9]{15}$/ig); if (cArr == null) { return false; } var year = idCard15.substring(6,8); var month = idCard15.substring(8,10); var day = idCard15.substring(10,12); var temp_date = new Date(year,parseFloat(month)-1,parseFloat(day)); // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法 if(temp_date.getYear()!=parseFloat(year) ||temp_date.getMonth()!=parseFloat(month)-1 ||temp_date.getDate()!=parseFloat(day)){ return false; }else{ return true; } } /***身份证号码验证 end**/
if(!IdCardValidate(cardid)){ //判断 alert( '身份证号输入有误'); }
将15位身份证号码转成18位
function upCardID15(cardID15){
var v = [2, 4, 8, 5, 10, 9, 7, 3, 6, 1, 2, 4, 8, 5, 10, 9, 7];
var vs = "10X98765432";
//将15位的号码转换位17位
var cardID17 = cardID15.substring(0,6)+"19"+cardID15.substring(6);
var N = 0;
var R = -1;
var T = '0';//储存最后一个数字
var j = 0;
var cardID18="";
//计数出第18位数字
for(var i=16;i>=0;i--){
N += parseInt(cardID17.substring(i, i + 1)) * v[j];
j++;
}
R = N % 11;
T = vs.charAt(R);
cardID18 = cardID17 + T;
return cardID18;
}
相关文章推荐
- JSON
- javascript创建cookies无法保存至本地
- JavaScript作用域与作用域链
- 用Js的eval解析JSON中的注意点
- javascript 闭包
- JS操作JSON总结
- 小问题汇总——JS篇 -持续更新
- js中将字符串转换成json的三种方式
- JavaScript中的this(你不知道的JavaScript)
- 廖雪峰JS教程学习记录----iterable可迭代类型集合
- js正则表达式test方法的问题
- 深入剖析 JavaScript 的深复制
- jsp页面 date转化成string
- jsoup爬取百度瀑布流图片
- JSON和XML解析的理解
- js字符串作为一个对象类型
- 轻松搞定JSONP跨域请求
- Servlet —— 只有一个实例
- 简单的刮刮乐源码
- js实现的飞机大战