.NET Standard Lib for Credit Card Number Operations
This project is still in early development, it comes with !!!ABSOLUTELY NO WARRANT!!! Please review the code before using it in your project.
Powershell
Install-Package Edi.CreditCardUtils -Version 0.3.0-alpha
.NET Core CLI
dotnet add package Edi.CreditCardUtils --version 0.3.0-alpha
The CreditCardValidator
performs 4 steps:
- Check card number format (is 14-19 digits)
- Perform Luhn check (Mod10)
- Test against known card type regex (Visa / Master etc..)
- Optional: Test against customized regex
Return Type:
public class CreditCardValidationResult
{
public CardNumberFormat CardNumberFormat { get; set; }
public string[] CardTypes { get; set; }
}
public enum CardNumberFormat
{
None = 0,
Valid_LuhnOnly = 100,
Valid_BINTest = 101,
Invalid_BadStringFormat = 200,
Invalid_LuhnFailure = 201
}
You may find all scenarios in Unit Test code
Validate card number only
var result = CreditCardValidator.ValidCardNumber("6011000990139424");
Assert.IsTrue(result.CreditCardNumberFormat == CreditCardNumberFormat.Valid_LuhnOnly);
Validate a Visa card
var result = CreditCardValidator.ValidCardNumber("4012888888881881");
Assert.IsTrue(result.CardNumberFormat == CardNumberFormat.Valid_BINTest && result.CardTypes.Contains("Visa"));
Customized card validator
public class WellsFargoBankValidator : ICardTypeValidator
{
public string Name => "Wells Fargo Bank";
public string RegEx => @"^(485246)\d{10}$";
}
[Test]
public void TestCardTypeValidator()
{
var result = CreditCardValidator.ValidCardNumber("4852461030260066", new ICardTypeValidator[]
{
new WellsFargoBankValidator()
});
Assert.IsTrue(result.CardNumberFormat == CardNumberFormat.Valid_BINTest && result.CardTypes.Contains("Wells Fargo Bank"));
}