валидатор кредитной карты с jQuery

Этот код не работает, и я не могу понять, почему:

это специальный 9-значный валидатор карты,

у меня есть текстовое поле на странице «9digitCardTextBox» и вызов с помощью валидатора на стороне клиента на странице .aspx.

ошибка: Ошибка выполнения в Microsoft JScript: требуется объект.

валидатор:

<asp:CustomValidator runat="server" ID="CustomValidator16" EnableClientScript="true" 
Display="Dynamic" OnServerValidate="9digitcard_ServerValidate" CssClass="error" 
SetFocusOnError="true" 
ClientValidationFunction="9digitcard_ClientValidate">cc not good</asp:CustomValidator>

клиентский вызов:

function 9digitcard_ClientValidate(sender, e)
{        
    num = $("input[name*='9digitCardTextBox']").val();                
    sum = 0; mul = 1; l = num.length;
    for (i = 0; i < l; i++)
    {
        digit = num.substring(l-i-1,l-i);
        tproduct = parseInt(digit ,10)*mul;
        if (tproduct >= 10)
            sum += (tproduct % 10) + 1;
        else
            sum += tproduct;
        if (mul == 1)
            mul++;
        else
            mul–-;
    }
    if ((sum % 10) == 0)
        e.isValid = true;
    else
        e.isValid = false;
}

person YaakovHatam    schedule 24.01.2013    source источник
comment
Объясните, что не работает.   -  person Jan Hančič    schedule 24.01.2013
comment
Ошибка выполнения в Microsoft JScript: требуется объект   -  person YaakovHatam    schedule 24.01.2013
comment
Является ли 9digitcard_ClientValidate допустимым идентификатором в JScrpt? Это было бы необычно.   -  person Anton Kovalenko    schedule 24.01.2013


Ответы (2)


Для этого не нужно использовать jquery, достаточно совпадения js:

var patt=/^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/g;
var mastercard    = "5123625454565122";
var random        = "21236258456565122";
var isValid       = patt.test(mastercard);

if(isValid){
    document.write("mastercard : credit card nbr is valid.<br />"); 
}else{
    document.write("mastercard : credit card nbr is NOT valid!<br />" ); 
}

var isValid     = patt.test(random);
if(isValid){
    document.write("random : credit card nbr is valid.<br />"); 
}else{
    document.write("random : credit card nbr is NOT valid!<br />" ); 
}

см.: http://jsfiddle.net/TbDR2/

изменить: вы можете найти другое регулярное выражение для проверки номера кредитной карты здесь: http://www.regular-expressions.info/creditcard.html

person Seb    schedule 24.01.2013
comment
спасибо за попытку, но это мне не помогает, вы предлагаете использовать в регулярном выражении, но мне нужен алгоритм кредитной карты - person YaakovHatam; 24.01.2013

Я не могу найти формальное определение синтаксиса JScript, но если он достаточно похож на JavaScript, то первое, что нужно сделать, — это переименовать 9digitcard_ClientValidate в имя, не начинающееся с цифр.

person Anton Kovalenko    schedule 24.01.2013