2013-10-13 22 views
-1

我使用Luhn算法驗證信用卡時遇到問題。無法使用Luhn算法驗證信用卡

我使用此C#代碼:

void ServerValidation(object source, ServerValidateEventArgs args) 
    { 
     // use a RequiredFieldValidator to check for an empty value 
     if (CreditCardNumber.Text == string.Empty) args.IsValid = true; 
     args.IsValid = IsCreditCardValid(this.CreditCardNumber.Text); 
    } 

    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e);    
     CreditcardValidation.ServerValidate += ServerValidation; 
    } 

    public bool IsCreditCardValid(string cardNumber) 
    { 
     const string allowed = ""; 
     int i; 

     StringBuilder cleanNumber = new StringBuilder(); 
     for (i = 0; i < cardNumber.Length; i++) 
     { 
      if (allowed.IndexOf(cardNumber.Substring(i, 1)) >= 0) 
       cleanNumber.Append(cardNumber.Substring(i, 1)); 
     } 
     if (cleanNumber.Length < 13 || cleanNumber.Length > 16) 
      return false; 

     for (i = cleanNumber.Length + 1; i <= 16; i++) 
      cleanNumber.Insert(0, "0"); 

     int multiplier, digit, sum, total = 0; 
     string number = cleanNumber.ToString(); 

     for (i = 1; i <= 16; i++) 
     { 
      multiplier = 1 + (i % 2); 
      digit = int.Parse(number.Substring(i - 1, 1)); 
      sum = digit * multiplier; 
      if (sum > 9) 
       sum -= 9; 
      total += sum; 
     } 
     return (total % 10 == 0); 

這在ASPX:

Creditcard number: <asp:TextBox ID="CreditCardNumber" runat="server"></asp:TextBox> 
<asp:RequiredFieldValidator ID="CreditCardNumberReq" ControlToValidate="CreditCardNumber" ErrorMessage="Please enter a Number" runat="server" Display="Dynamic"></asp:RequiredFieldValidator> 
<asp:CustomValidator ID="CreditcardValidation" ControlToValidate="CreditCardNumber" onservervalidate="ServerValidation" ErrorMessage="Please enter a valid Creditcard Number" runat="server" Display="Dynamic"></asp:CustomValidator> 

我總是得到錯誤的,因爲我沒有從我的.aspx值到C#什麼的。這是我得到的具體錯誤:

說明:編譯資源時需要爲編譯該請求時出錯。檢查以下具體的錯誤細節並適當修改您的源代碼。

編譯器錯誤消息:CS1061:'ASP.controls_midtermucc_ascx'未包含'服務器驗證'的定義,並且沒有找到接受第一個參數類型爲'ASP.controls_midtermucc_ascx'的擴展方法'Server Validation' '(你是否缺少使用指令或裝配參考?)

我該怎麼辦?

+1

你會得到什麼錯誤?如果您讓我們猜測錯誤,我們無法提供幫助。 –

+0

它說的是這樣的: '描述:編譯服務此請求所需資源時出錯。檢查以下具體的錯誤細節並適當修改您的源代碼。 編譯器錯誤消息:CS1061:'ASP.controls_midtermucc_ascx'不包含'服務器驗證'的定義,並且沒有找到接受第一個參數類型爲'ASP.controls_midtermucc_ascx'的擴展方法'Server Validation'(你是否缺少使用指令或程序集引用?).' – user2157063

回答

1

您需要使您的服務器方法受到保護。它目前是私人的。 aspx頁面從類後面的代碼繼承。如果該方法是私有的,不受保護或公開,則子類不可見。

所以這個:protected void ServerValidation(object source, ServerValidateEventArgs args)

+0

謝謝你,那是它:) – user2157063