Skip to content

Commit

Permalink
Merge pull request #9 from jellyhive/add_account_maxlength_check
Browse files Browse the repository at this point in the history
Added check for maxlength of account number.
  • Loading branch information
jonaswikstrom committed Oct 13, 2023
2 parents 9f5473f + de9ad45 commit fef4cf9
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 52 deletions.
106 changes: 58 additions & 48 deletions src/SwedishBankAccounts.UnitTests/BankAccountNumberTests.cs
Original file line number Diff line number Diff line change
@@ -1,58 +1,68 @@
using System;

namespace SwedishBankAccounts.UnitTests;
namespace SwedishBankAccounts.UnitTests;

public class BankAccountNumberTests : UnitTests
{
[Theory]
[InlineData("9071, 417 23 83", "Multitude Bank")]
[InlineData("6683764450808", "Handelsbanken")]
[InlineData("8424-4,983 189 224-6", "Swedbank")]
[InlineData("8351-9,392 242 224-5", "Swedbank")]
[InlineData("8129-9,043 386 711-6", "Swedbank")]
[InlineData("3300 000620-5124", "Nordea")]
[InlineData("9585, 612345740", "Aion Bank")]
[InlineData("9553-5894364", "Avanza Bank")]
[InlineData("9683,143 579 155", "BlueStep Finans")]
[InlineData("9472,456 987 154", "BNP Paribas")]
[InlineData("9045,987 456 128", "Citibank")]
[InlineData("1255,6548711", "Danske Bank")]
[InlineData("9199,321 8647", "DNB Bank")]
[InlineData("9704,861 957 3564", "Ekobanken")]
[InlineData("9597 984 216 868", "Erik Penser")]
[InlineData("9273-956 609 3", "ICA Banken")]
[InlineData("9178-516 4155", "IKANO Bank")]
[InlineData("9674-9871358", "JAK Medlemsbank")]
[InlineData("97891111113", "Klarna Bank")]
[InlineData("9398-2159875", "Landshypotek")]
[InlineData("9714-8924679", "Lunar Bank")]
[InlineData("9630, 6541128", "Lån & Spar Bank Sverige")]
[InlineData("3400, 123 4645", "Länsförsäkringar Bank")]
[InlineData("9060, 541 6877", "Länsförsäkringar Bank")]
[InlineData("9234, 879 1554", "Marginalen Bank")]
[InlineData("9646, 1230477", "Nordax Bank")]
[InlineData("1150, 9743685", "Nordea")]
[InlineData("4564, 154 1970", "Nordea")]
[InlineData("9108 876 1587", "Nordnet Bank")]
[InlineData("9752-6546873", "Northmill Bank")]
[InlineData("9280 689 1477", "Resurs Bank")]
[InlineData("9882 134 6325", "Riksgälden")]
[InlineData("9462 613 5412", "Santander Consumer Bank")]
[InlineData("9252 132 2148", "SBAB")]
[InlineData("5140 321 5642", "SEB")]
[InlineData("9160 741 6680", "Skandiabanken")]
[InlineData("9664 446 5511", "Svea Bank")]
[InlineData("9180 331 4218", "Danske Bank")]
[InlineData("9530 364 8748", "Nordea Plusgirot")]
[InlineData("9892 398 7468", "Riksgälden")]
[InlineData("9578 633 1128", "Sparbanken Syd")]
[InlineData("9340 321 4681", "Swedbank")]
public void AccountNumber_TryParse_ShouldValidate(string accountNumber, string bankName)
[Theory]
[InlineData("9071, 417 23 83", "Multitude Bank", InitOptions.Strict)]
[InlineData("6683764450808", "Handelsbanken", InitOptions.Strict)]
[InlineData("8424-4,983 189 224-6", "Swedbank", InitOptions.Strict)]
[InlineData("8351-9,392 242 224-5", "Swedbank", InitOptions.Strict)]
[InlineData("8129-9,043 386 711-6", "Swedbank", InitOptions.Strict)]
[InlineData("3300 000620-5124", "Nordea", InitOptions.Strict)]
[InlineData("9585, 612345740", "Aion Bank", InitOptions.Strict)]
[InlineData("9553-5894364", "Avanza Bank", InitOptions.Strict)]
[InlineData("9683,143 579 155", "BlueStep Finans", InitOptions.Strict)]
[InlineData("9472,456 987 154", "BNP Paribas", InitOptions.Strict)]
[InlineData("9045,987 456 128", "Citibank", InitOptions.Strict)]
[InlineData("1255,6548711", "Danske Bank", InitOptions.Strict)]
[InlineData("9199,321 8647", "DNB Bank", InitOptions.Strict)]
[InlineData("9704,861 957 3564", "Ekobanken", InitOptions.Strict)]
[InlineData("9597 984 216 868", "Erik Penser", InitOptions.Strict)]
[InlineData("9273-956 609 3", "ICA Banken", InitOptions.Strict)]
[InlineData("9178-516 4155", "IKANO Bank", InitOptions.Strict)]
[InlineData("9674-9871358", "JAK Medlemsbank", InitOptions.Strict)]
[InlineData("97891111113", "Klarna Bank", InitOptions.Strict)]
[InlineData("9398-2159875", "Landshypotek", InitOptions.Strict)]
[InlineData("9714-8924679", "Lunar Bank", InitOptions.Strict)]
[InlineData("9630, 6541128", "Lån & Spar Bank Sverige", InitOptions.Strict)]
[InlineData("3400, 123 4645", "Länsförsäkringar Bank", InitOptions.Strict)]
[InlineData("9060, 541 6877", "Länsförsäkringar Bank", InitOptions.Strict)]
[InlineData("9234, 879 1554", "Marginalen Bank", InitOptions.Strict)]
[InlineData("9646, 1230477", "Nordax Bank", InitOptions.Strict)]
[InlineData("1150, 9743685", "Nordea", InitOptions.Strict)]
[InlineData("4564, 154 1970", "Nordea", InitOptions.Strict)]
[InlineData("9108 876 1587", "Nordnet Bank", InitOptions.Strict)]
[InlineData("9752-6546873", "Northmill Bank", InitOptions.Strict)]
[InlineData("9280 689 1477", "Resurs Bank", InitOptions.Strict)]
[InlineData("9882 134 6325", "Riksgälden", InitOptions.Strict)]
[InlineData("9462 613 5412", "Santander Consumer Bank", InitOptions.Strict)]
[InlineData("9252 132 2148", "SBAB", InitOptions.Strict)]
[InlineData("5140 321 5642", "SEB", InitOptions.Strict)]
[InlineData("9160 741 6680", "Skandiabanken", InitOptions.Strict)]
[InlineData("9664 446 5511", "Svea Bank", InitOptions.Strict)]
[InlineData("9180 331 4218", "Danske Bank", InitOptions.Strict)]
[InlineData("9530 364 8748", "Nordea Plusgirot", InitOptions.Strict)]
[InlineData("9892 398 7468", "Riksgälden", InitOptions.Strict)]
[InlineData("9578 633 1128", "Sparbanken Syd", InitOptions.Strict)]
[InlineData("9340 321 4681", "Swedbank", InitOptions.Strict)]
[InlineData("9340 321 4682", "Swedbank", InitOptions.Lax)]
public void BankAccountNumber_TryParse_ShouldValidate(string accountNumber, string bankName, InitOptions initOptions)
{
BankAccountNumber.TryParse(accountNumber, out var bankAccountNumber)
BankAccountNumber.TryParse(accountNumber, initOptions, out var bankAccountNumber)
.Should().BeTrue($"it should be validated to {bankName}");

bankAccountNumber.Should().NotBeNull($"it should be validated to {bankName}");
bankAccountNumber!.Bank.Should().Be(bankName, $"it should be validated to {bankName}");
}

[Theory]
[InlineData("1234567890123456", InitOptions.Strict)]
[InlineData("9252 132 2149", InitOptions.Lax)]
[InlineData("9340 321 4682", InitOptions.Strict)]
public void BankAccountNumber_TryParse_ShouldNotValidate(string accountNumber, InitOptions initOptions)
{
BankAccountNumber.TryParse(accountNumber, initOptions ,out var bankAccountNumber).Should().BeFalse();

bankAccountNumber.Should().BeNull();
}
}
10 changes: 6 additions & 4 deletions src/SwedishBankAccounts/BankAccountNumber.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public record BankAccountNumber
/// </summary>
public string AccountNumber { get; }

private BankAccountNumber(string bank, string sortingCode, string accountNumber)
private BankAccountNumber(string bank, string sortingCode, string accountNumber)
{
Bank = bank;
SortingCode = sortingCode;
Expand Down Expand Up @@ -76,21 +76,23 @@ public static bool TryParse(string value, out BankAccountNumber? bankAccountNumb
/// <returns>True if parse is successful, otherwise false</returns>
public static bool TryParse(string value, InitOptions? initOptions, out BankAccountNumber? bankAccountNumber)
{
initOptions ??= InitOptions.Strict;
const int accountMaxLength = 15;
initOptions ??= InitOptions.Strict;

bankAccountNumber = null;
value = Regex.Replace(value, @"[^\d]", "");

if (value.Length > accountMaxLength) return false;
if (value.StartsWith("8") && value.Length < 7) return false;
if(!value.StartsWith("8") && value.Length < 6) return false;
if (!value.StartsWith("8") && value.Length < 6) return false;

var sortingCode = value.Substring(0, value.StartsWith("8") ? 5 : 4);
var accountNumber = value.Substring(value.StartsWith("8") ? 5 : 4);

if (sortingCode.Length is < 4 or > 4 && !Modulus10.Validate(sortingCode)) return false;

var bank = SwedishBankAccounts.Bank.Banks.SingleOrDefault(s => s.HasSortingCode(sortingCode.Substring(0, 4)));
if(bank == null) return false;
if (bank == null) return false;

var valid = bank.BankAccountNumberType.Validate(sortingCode, accountNumber);
switch (valid)
Expand Down

0 comments on commit fef4cf9

Please sign in to comment.