码迷,mamicode.com
首页 > Web开发 > 详细

身份证验证JS版(转载)

时间:2014-10-17 13:23:22      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   io   os   ar   使用   java   

/**
*代码参考来自: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版(转载)

标签:style   blog   http   color   io   os   ar   使用   java   

原文地址:http://www.cnblogs.com/fsong/p/4030649.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!