大陆居民身份证真伪校验

var IdCardValid = {//身份证检查
    isIdCard : function(_id) {
        var returnObj = new Object();
        var id = $.trim(_id.toUpperCase());
        var idArray = this._splitId(id);
        
        if (idArray.length > 0) {
            if (id.length != 18) {
                returnObj.status = false;
                returnObj.info = " 身份证号码必须是18位";

                return returnObj;
            }

            var checksum = id.substring(17, 18);
            var sum = 0;

            for ( var i = 1; i <= idArray.length; i++) {
                var Ai = idArray[i - 1];
                var Wi = this._getWeightingFactor(i);

                if (Wi != -1) {
                    sum += Ai * Wi;
                }
            }

            var mod = sum % 11;

            if (this._getChecksum(mod) == checksum) {
                returnObj.status = true;

                return returnObj;
            } else {
                returnObj.status = false;
                returnObj.info = " 身份证号码输入错误";

                return returnObj;
            }
        } else {
            returnObj.status = false;
            returnObj.info = " 身份证号码格式错误";

            return returnObj;
        }
    },
    
    _splitId : function(_id) {
        var len = _id.length;
        var array = new Array();

        for ( var i = 0; i < len - 1; i++) {
            array.push(_id.charAt(i));
        }

        return array;
    },
    
    _getWeightingFactor : function(_index) {
        switch (_index) {
        case 1:
            return 7;
        case 2:
            return 9;
        case 3:
            return 10;
        case 4:
            return 5;
        case 5:
            return 8;
        case 6:
            return 4;
        case 7:
            return 2;
        case 8:
            return 1;
        case 9:
            return 6;
        case 10:
            return 3;
        case 11:
            return 7;
        case 12:
            return 9;
        case 13:
            return 10;
        case 14:
            return 5;
        case 15:
            return 8;
        case 16:
            return 4;
        case 17:
            return 2;
        default:
            return -1;
        }
    },
    _getChecksum : function(_mod) {
        switch (_mod) {
        case 0:
            return 1;
        case 1:
            return 0;
        case 2:
            return "X";
        case 3:
            return 9;
        case 4:
            return 8;
        case 5:
            return 7;
        case 6:
            return 6;
        case 7:
            return 5;
        case 8:
            return 4;
        case 9:
            return 3;
        case 10:
            return 2;
        default:
            return -1;
        }
    }
};

 

posted @ 2013-12-09 14:42  蚂蚁小圆  阅读(258)  评论(0编辑  收藏  举报