J'ai mis en place un cours pour valider les numéros de cartes de crédit. Le type et le numéro de carte de crédit sont sélectionnés sur un formulaire dans une classe distincte. J'essaie de comprendre comment obtenir le type de carte de crédit et le numéro sélectionnés dans l'autre classe (frmPayment) pour ma carte de crédit algorithme de classe:Comment utiliser une classe distincte pour valider les numéros de cartes de crédit en 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 au deuxième paragraphe. Vous ne voulez probablement pas que le ctor prenne des args, puis les ignore peut-être dans la méthode. Si c'était moi, je rendrais le seul ctor privé, laisser tomber les deux propriétés, et garder la classe entière statique. Puis quand je voulais valider l'appel CardValidator.Validate (type, numéro); –
ce n'est pas encore fini. J'arrivais juste là où je voulais commencer à essayer de l'appeler à partir de ma classe frmPayment, mais je n'arrivais pas à trouver un moyen de le faire. C'est pourquoi mon constructeur n'est pas encore là. Je n'ai pas fait un comme ça avant – EvanRyan