我已經設置了一個類來驗證信用卡號碼。信用卡類型和號碼在單獨的課程表格中選擇。我試圖找出如何獲得信用卡類型和數量都在其他類(frmPayment)中選擇我的信用卡類算法:如何使用單獨的類來驗證C#中的信用卡號碼
public enum CardType
{
MasterCard, Visa, AmericanExpress
}
public sealed class CardValidator
{
public static string SelectedCardType { get; private set; }
public static string CardNumber { get; private set; }
private CardValidator(string selectedCardType, string cardNumber)
{
SelectedCardType = selectedCardType;
CardNumber = cardNumber;
}
public static bool Validate(CardType cardType, string cardNumber)
{
byte[] number = new byte[16];
int length = 0;
for (int i = 0; i < cardNumber.Length; i++)
{
if (char.IsDigit(cardNumber, i))
{
if (length == 16) return false;
number[length++] = byte.Parse(cardNumber[i]); //not working. find different way to parse
}
}
switch(cardType)
{
case CardType.MasterCard:
if(length != 16)
return false;
if(number[0] != 5 || number[1] == 0 || number[1] > 5)
return false;
break;
case CardType.Visa:
if(length != 16 & length != 13)
return false;
if(number[0] != 4)
return false;
break;
case CardType.AmericanExpress:
if(length != 15)
return false;
if(number[0] != 3 || (number[1] != 4 & number[1] != 7))
return false;
break;
}
// Use Luhn Algorithm to validate
int sum = 0;
for(int i = length - 1; i >= 0; i--)
{
if(i % 2 == length % 2)
{
int n = number[i] * 2;
sum += (n/10) + (n % 10);
}
else
sum += number[i];
}
return (sum % 10 == 0);
}}
+1在第二段。你可能不希望ctor採取參數,然後可能在方法中忽略它們。如果是我,我會讓唯一的ctor變成私人的,放棄這兩個屬性,並保持整個類的靜態。然後當我想驗證調用CardValidator.Validate(type,number); – 2010-05-11 21:17:24
尚未完成。我剛剛開始嘗試從我的frmPayment類中調用它,但無法完全找到一種方法來做到這一點。這就是爲什麼我的構造函數還沒有完成。我只是在 – EvanRyan 2010-05-11 21:18:57