校验身份证号是否正确
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:"国外"};
function IdentityCodeValid(code){
//是否为空
if(code === ''){
return false;
}
//校验长度,类型
if(isCardNo(code) === false){
return false;
}
//检查省份
if(checkProvince(code) === false){
return false;
}
//校验生日
if(checkBirthday(code) === false){
return false;
}
//检验位的检测
if(checkParity(code) === false){
return false;
}
return true;
}
function isCardNo(code){
//身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X
var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
if(reg.test(code) === false){
return false;
}
return true;
}
function checkProvince(code){
var province = code.substr(0,2);
if(vcity[province] == undefined){
return false;
}
return true;
}
function checkBirthday(code){
var len = code.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 = code.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 = code.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;
}
function verifyBirthday(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;
}
function checkParity(code){
//15位转18位
card = changeFivteenToEighteen(code);
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;
}
function changeFivteenToEighteen(code){
if(code.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;
code = card.substr(0, 6) + '19' + code.substr(6, code.length - 6);
for(i = 0; i < 17; i ++){
cardTemp += code.substr(i, 1) * arrInt[i];
}
code += arrCh[cardTemp % 11];
return code;
}
return code;
}
相关推荐
使用javascript校验身份证号码的合法性 校验规则严格,很容易套用到项目中 套用例子详见http://blog.csdn.net/zcyhappy1314/article/details/8645189
js校验身份证号和银行卡号,内有js和调用方法,经过测试,非常好用
这是一段校验身份证号的js。
js加权校验身份证号。
java代码校验身份证号与js校验身份证号
js+正则校验身份证号,包括地区、年份、月份、日期、及最主要的--末尾算法--校验
JS验证身份证号码合法性
html5进行身份证号码校验,支持15位与18位的身份证号码校验
JavaScript的form表单验证中的身份证校验
js正则表达式校验数字、email、身份证号等
基于js的身份证校验,可以校验身份证号,校验身份证号与性别,身份证号与出生日期信息是否相同,校验最后一位是否正确。15,17位身份证号自动变18位。
用javascript 校验 身份证 的真实性
身份证校验JavaScript 身份证校验JavaScript 身份证校验JavaScript
JS常用工具函数(压缩包中含有MD文件可自行查看)--包含:通用格式化时间、字符串验证-验证邮箱、手机号、电话号码、url地址、严格校验身份证号码,判断数据类型-是否是字符串、数字、Boolean、函数、对象、数组...
调用: if(!idCardNoValidate(idCardNo)){ showMsg("您输入的身份证号码有误,请重新输入"); return false; }
一个js文件,一个方法用正则表达式来验证是否为身份证号
很好用的js验证身份证,符合15位和18位身份证的验证规则
网上很多关于身份证校验的javascript代码,不过都没给全,以下是我添加全了函数一起提供的,希望对大家有所帮助。 javascript身份证号码验证-支持18位带x身份证。
通过身份证号码特点设计的验证程序。能准确的验证身份证号真伪
* 身份证15位编码规则:dddddd yymmdd xx p * dddddd:地区码 * yymmdd: 出生年月日 * xx: 顺序类编码,无法确定 * p: 性别,奇数为男,偶数为女 * <p /> * 身份证18位编码规则:dddddd yyyymmdd xxx y ...