Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

## Unreleased
- Implement `IParsable<TSelf>` on Iban type in https://github.com/skwasjer/IbanNet/pull/138
- Implement `BankAccountNumber` on Iban type in https://github.com/skwasjer/IbanNet/pull/394

## v6.0.0

Expand Down
21 changes: 21 additions & 0 deletions src/IbanNet/Iban.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,27 @@ internal Iban(string iban, IbanCountry ibanCountry, bool skipNormalize = false)
/// </summary>
public string Bban => Extract(Country.Bban) ?? _iban.Substring(4);

/// <summary>
/// Gets the bank account number part of the IBAN.
/// </summary>
public string? BankAccountNumber
{
get
{
var result = Extract(Country.BankAccountNumber);
if (result is not null)
{
return result;
}
var bankIdentifier = BankIdentifier;
var branchIdentifier = BranchIdentifier;
if (bankIdentifier is null || branchIdentifier is null)
{
return null;
}
return Bban.Substring(bankIdentifier.Length + branchIdentifier.Length);
}
}
/// <summary>
/// Gets the bank identifier, or <see langword="null" /> if bank identifier cannot be extracted.
/// </summary>
Expand Down
12 changes: 12 additions & 0 deletions src/IbanNet/Registry/IbanCountry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ public sealed class IbanCountry
private readonly PatternDescriptor? _bankPatternDescriptor;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly PatternDescriptor? _branchPatternDescriptor;
[DebuggerBrowsable(DebuggerBrowsableState.Never)]
private readonly PatternDescriptor? _bankAccountNumberPatternDescriptor;

/// <summary>
/// Initializes a new instance of the <see cref="IbanCountry" /> class using specified 2 letter ISO region name.
Expand Down Expand Up @@ -126,6 +128,16 @@ public PatternDescriptor Branch
init => _branchPatternDescriptor = value;
}

/// <summary>
/// Gets the pattern descriptor for the bank account number identifier.
/// </summary>
[AllowNull]
public PatternDescriptor BankAccountNumber
{
get => _bankAccountNumberPatternDescriptor ?? NullPatternDescriptor;
init => _bankAccountNumberPatternDescriptor = value;
}

/// <summary>
/// Gets when this <see cref="IbanCountry" /> was last updated in the Iban Registry.
/// </summary>
Expand Down
2 changes: 2 additions & 0 deletions test/IbanNet.Tests/IbanTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ public void Given_that_patternDescriptor_exists_it_should_return_extracted_prope

// Act & Assert
iban.Bban.Should().Be(ibanCountry.Bban.Example);
iban.BankAccountNumber.Should().Be(ibanCountry.BankAccountNumber.Example);
iban.BankIdentifier.Should().Be(ibanCountry.Bank.Example);
iban.BranchIdentifier.Should().Be(ibanCountry.Branch.Example);
}
Expand All @@ -309,6 +310,7 @@ public void Given_that_patternDescriptor_is_not_known_it_should_return_null()

// Act & Assert
iban.Bban.Should().Be(ibanCountry.Bban.Example);
iban.BankAccountNumber.Should().BeNull("no pattern descriptor is available");
iban.BankIdentifier.Should().BeNull("no pattern descriptor is available");
iban.BranchIdentifier.Should().BeNull("no pattern descriptor is available");
}
Expand Down
3 changes: 3 additions & 0 deletions test/IbanNet.Tests/Registry/IbanCountryTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ public void Getters_should_return_set_properties()
const string twoLetterIsoRegionName = "nl";
var ibanPatternDescriptor = new PatternDescriptor(NullPattern.Instance);
var bbanPatternDescriptor = new PatternDescriptor(NullPattern.Instance);
var bankAccountNumberPatternDescriptor = new PatternDescriptor(NullPattern.Instance);
var bankPatternDescriptor = new PatternDescriptor(NullPattern.Instance);
var branchPatternDescriptor = new PatternDescriptor(NullPattern.Instance);
const string displayName = "name";
Expand All @@ -59,6 +60,7 @@ public void Getters_should_return_set_properties()
{
Iban = ibanPatternDescriptor,
Bban = bbanPatternDescriptor,
BankAccountNumber = bankAccountNumberPatternDescriptor,
Bank = bankPatternDescriptor,
Branch = branchPatternDescriptor,
DisplayName = displayName,
Expand All @@ -73,6 +75,7 @@ public void Getters_should_return_set_properties()
ibanCountry.TwoLetterISORegionName.Should().Be(twoLetterIsoRegionName.ToUpper());
ibanCountry.Iban.Should().BeSameAs(ibanPatternDescriptor);
ibanCountry.Bank.Should().BeSameAs(bankPatternDescriptor);
ibanCountry.BankAccountNumber.Should().BeSameAs(bankAccountNumberPatternDescriptor);
ibanCountry.Bban.Should().BeSameAs(bbanPatternDescriptor);
ibanCountry.Branch.Should().BeSameAs(branchPatternDescriptor);
ibanCountry.DisplayName.Should().Be(displayName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public void When_definitions_are_loaded_should_contain(IbanCountry expectedIbanC
actual.Should().BeEquivalentTo(expectedIbanCountry);
actual.Iban.Pattern.ToString().Should().Be(expectedIbanCountry.Iban.Pattern.ToString());
actual.Bban.Pattern.ToString().Should().Be(expectedIbanCountry.Bban.Pattern.ToString());
actual.BankAccountNumber.Pattern.ToString().Should().Be(expectedIbanCountry.BankAccountNumber.Pattern.ToString());
actual.Bank.Pattern.ToString().Should().Be(expectedIbanCountry.Bank.Pattern.ToString());
actual.Branch.Pattern.ToString().Should().Be(expectedIbanCountry.Branch.Pattern.ToString());
}
Expand Down
Loading