.NET Standard Lib for Credit Card Number Operations
This project is still in early development.
Powershell
Install-Package Edi.CreditCardUtils -Version 0.4.0-alpha
.NET Core CLI
dotnet add package Edi.CreditCardUtils --version 0.4.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"));
}
var bin = "485246";
int length = 16;
var cn = CreditCardGenerator.GenerateCardNumber(bin, length);