首页 > 代码库 > 身份证验证JS版(转载)

身份证验证JS版(转载)

/***代码参考来自:http://www.oschina.net/code/snippet_778481_21907*只验证身份证是否正确,未加上判断性别*@param num 身份证号码*@return boolean true|false*使用,var bools = checkIdentity.validate(num);*/var checkIdentity = {    validate:function(num)    {        var areaNum = dateNum = sexNum = endNum = 0;        if(num == "" || num== null || num == undefined)        {            return false;        }        // 不是15位或不是18位都是无效身份证号        if(num.length != 15 && num.length != 18){            return false;        }        // 是数值        if(!isNaN(num)){            // 如果是15位身份证号            if(num.length == 15 ){                // 省市县(3位)                areaNum = num.substring(0,3);                // 出生年月(6位)                dateNum = num.substring(6,12);                // 性别(3位)                sexNum = num.substring(12,15);            }else{            // 如果是18位身份证号                // 省市县(6位)                areaNum = num.substring(0,6);                // 出生年月(8位)                dateNum = num.substring(6,14);                // 性别(3位)                sexNum = num.substring(14,17);                // 校验码(1位)                endNum = num.substring(17,18);            }        }else{        // 不是数值                    if(num.length == 15){                return false;            }else{                // 验证前17位为数值,且18位为字符x                var check17 = num.substring(0,17);                if(isNaN(check17)){                    return false;                }                // 省市县(6位)                areaNum = num.substring(0,6);                // 出生年月(8位)                dateNum = num.substring(6,14);                // 性别(3位)                sexNum = num.substring(14,17);                // 校验码(1位)                endNum = num.substring(17,18);                if(endNum != ‘x‘ && endNum != ‘X‘){                    return false;                }            }        }        if(areaNum != 0){            if(!this._checkArea(areaNum)){                return false;            }        }        if(dateNum != 0){            if(!this._checkDate(dateNum)){                return false;            }        }        if(endNum != 0){            if(!this._checkEnd(endNum,num)){                return false;            }        }                return true;                    },    _checkArea:function(area)    {        var num1 = area.substring(0,2);        // var num2 = area.substring(2,2);        // var num3 = area.substring(4,2);        // 根据GB/T2260—999,省市代码11到65        if(10 < num1 && num1 < 66){            return true;        }else{            return false;        }        //============        // 对市 区进行验证        //============    },    _checkDate:function(date)    {        var statusY = date1 = date2 = date3="";         if(date.length == 6){            date1 = date.substring(0,2);            date2 = date.substring(2,4);            date3 = date.substring(4,6);            statusY = this._checkY(‘19‘+date1);        }else{            var nowDate = new Date();            date1 = date.substring(0,4);            date2 = date.substring(4,6);            date3 = date.substring(6,8);            var nowY  = nowDate.getFullYear();            if(1900 < date1 && date1 <= nowY){                statusY = this._checkY(date1);            }else{                return false;            }        }        if(0 < date2 && date2 <13){            if(date2 == 2){                // 润年                if(statusY){                    if(0 < date3 && date3 <= 29){                        return true;                    }else{                        return false;                    }                }else{                // 平年                    if(0 < date3 && date3 <= 28){                        return true;                    }else{                        return false;                    }                }            }else{                var maxDateNum = this._getDateNum(statusY,date2);                if(0 < date3 && date3 <= maxDateNum){                    return true;                }else{                    return false;                }            }        }else{            return false;        }    },    _checkY:function(Y){        // 验证平年润年,参数年份,返回 true为润年  false为平年        if(typeof Y == ‘string‘){            Y = parseInt(Y);        }        if(Y % 100 == 0){            if(Y % 400 == 0){                return true;            }else{                return false;            }        }else if(Y % 4 ==  0){            return true;        }else{            return false;        }    },    _getDateNum:function($year,$month)    {        var days = new Date($year,$month,0).getDate();        return days;    },    _checkEnd:function(end,num){        var checkHou = new Array(1,0,‘x‘,9,8,7,6,5,4,3,2);        var checkGu = new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2);        var sum = 0;        var numArr = new Array();        for(var j = 0;j < num.length;j++)        {            var tmpJ = j+1;            numArr[j] = num.substring(j,tmpJ);        }            for(var i = 0;i < 17;i++){            sum += parseInt(checkGu[i]) * parseInt(numArr[i]);        }        var checkHouParameter= sum % 11;        if(checkHou[checkHouParameter] != num.substring(17,18)){            return false;        }else{            return true;        }    }}

这是自己将PHP代码转成Javascript,由于时间比较赶,未进行很多测试,如发现不对的地方,还请你能指出,告诉我,非常感谢.

我的联系邮箱是:xiaofosong@126.com

身份证验证JS版(转载)