Esempio n. 1
0
        private static bool hasValidBbanEntryCharacterType(BBanEntry entry, string entryValue, out IbanFormatViolation validationResult)
        {
            validationResult = IbanFormatViolation.NO_VIOLATION;

            switch (entry.CharacterType)
            {
            case BBanEntryCharacterType.A:
                foreach (char c in entryValue.ToCharArray())
                {
                    if (!char.IsUpper(c))
                    {
                        validationResult = IbanFormatViolation.BBAN_ONLY_UPPER_CASE_LETTERS;
                        break;
                    }
                }
                break;

            case BBanEntryCharacterType.C:
                foreach (char c in entryValue.ToCharArray())
                {
                    if (!char.IsLetterOrDigit(c))
                    {
                        validationResult = IbanFormatViolation.BBAN_ONLY_DIGITS_OR_LETTERS;
                        break;
                    }
                }
                break;

            case BBanEntryCharacterType.N:
                foreach (char c in entryValue.ToCharArray())
                {
                    if (!char.IsDigit(c))
                    {
                        validationResult = IbanFormatViolation.BBAN_ONLY_DIGITS;
                        break;
                    }
                }
                break;
            }

            return(validationResult == IbanFormatViolation.NO_VIOLATION);
        }
Esempio n. 2
0
        private static void validateBbanEntryCharacterType(BBanEntry entry, string entryValue)
        {
            switch (entry.CharacterType)
            {
            case BBanEntryCharacterType.A:
                foreach (char c in entryValue.ToCharArray())
                {
                    if (!char.IsUpper(c))
                    {
                        throw new IbanFormatException($"'{entryValue}' must contain only upper case letters",
                                                      IbanFormatViolation.BBAN_ONLY_UPPER_CASE_LETTERS, c, entry.EntryType, entryValue);
                    }
                }
                break;

            case BBanEntryCharacterType.C:
                foreach (char c in entryValue.ToCharArray())
                {
                    if (!char.IsLetterOrDigit(c))
                    {
                        throw new IbanFormatException($"'{entryValue}' must contain only letters or digits",
                                                      IbanFormatViolation.BBAN_ONLY_DIGITS_OR_LETTERS, c, entry.EntryType, entryValue);
                    }
                }
                break;

            case BBanEntryCharacterType.N:
                foreach (char c in entryValue.ToCharArray())
                {
                    if (!char.IsDigit(c))
                    {
                        throw new IbanFormatException($"'{entryValue}' must contain only digits",
                                                      IbanFormatViolation.BBAN_ONLY_DIGITS, c, entry.EntryType, entryValue);
                    }
                }
                break;
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Loads BBANs structures definitions
        /// </summary>
        private void loadStructures()
        {
            _bbanStructures = new SortedDictionary <string, BBanStructure>();


            _bbanStructures.Add("AD", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(12, "c")));

            _bbanStructures.Add("AE", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("AL", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("AT", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "n")));

            _bbanStructures.Add("AZ", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(20, "c")));

            _bbanStructures.Add("BH", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(14, "c")));

            _bbanStructures.Add("BE", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(7, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("BA", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(3, "n"),
                                                        BBanEntry.AccountNumber(8, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("BR", new BBanStructure(BBanEntry.BankCode(8, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(10, "n"),
                                                        BBanEntry.AccountType(1, "a"),
                                                        BBanEntry.OwnerAccountNumber(1, "c")));

            _bbanStructures.Add("BG", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountType(2, "n"),
                                                        BBanEntry.AccountNumber(8, "c")));

            // since 2017
            _bbanStructures.Add("BY", new BBanStructure(BBanEntry.BankCode(4, "c"),
                                                        BBanEntry.BalanceAccountNumber(4, "n"),
                                                        BBanEntry.AccountNumber(16, "n")));

            _bbanStructures.Add("CR", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(14, "n")));

            _bbanStructures.Add("CY", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("CZ", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumberPrefix(6, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("DE", new BBanStructure(BBanEntry.BankCode(8, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("DK", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("DO", new BBanStructure(BBanEntry.BankCode(4, "c"),
                                                        BBanEntry.AccountNumber(20, "n")));

            _bbanStructures.Add("EE", new BBanStructure(BBanEntry.BankCode(2, "n"),
                                                        BBanEntry.BranchCode(2, "n"),
                                                        BBanEntry.AccountNumber(11, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n")));

            _bbanStructures.Add("ES", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("FO", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumber(9, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n")));

            _bbanStructures.Add("FI", new BBanStructure(BBanEntry.BankCode(6, "n"),
                                                        BBanEntry.AccountNumber(7, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n")));

            _bbanStructures.Add("FR", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "c"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("GB", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.BranchCode(6, "n"),
                                                        BBanEntry.AccountNumber(8, "n")));

            _bbanStructures.Add("GE", new BBanStructure(BBanEntry.BankCode(2, "a"),
                                                        BBanEntry.AccountNumber(16, "n")));

            _bbanStructures.Add("GI", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(15, "c")));

            _bbanStructures.Add("GL", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("GR", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("GT", new BBanStructure(BBanEntry.BankCode(4, "c"),
                                                        BBanEntry.AccountNumber(20, "c")));

            _bbanStructures.Add("HR", new BBanStructure(BBanEntry.BankCode(7, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("HU", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(16, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n")));

            _bbanStructures.Add("CH", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.AccountNumber(12, "c")));

            _bbanStructures.Add("IS", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.BranchCode(2, "n"),
                                                        BBanEntry.AccountNumber(6, "n"),
                                                        BBanEntry.IdentificationNumber(10, "n")));

            _bbanStructures.Add("IE", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.BranchCode(6, "n"),
                                                        BBanEntry.AccountNumber(8, "n")));

            _bbanStructures.Add("IL", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(3, "n"),
                                                        BBanEntry.AccountNumber(13, "n")));

            _bbanStructures.Add("IR", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(19, "n")));

            _bbanStructures.Add("IT", new BBanStructure(BBanEntry.NationalCheckDigit(1, "a"),
                                                        BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(12, "c")));

            _bbanStructures.Add("JO", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(18, "c")));

            _bbanStructures.Add("KZ", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(13, "c")));

            _bbanStructures.Add("KW", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(22, "c")));

            _bbanStructures.Add("LV", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(13, "c")));

            _bbanStructures.Add("LB", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumber(20, "c")));

            _bbanStructures.Add("LI", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.AccountNumber(12, "c")));

            _bbanStructures.Add("LT", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "n")));

            _bbanStructures.Add("LU", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(13, "c")));

            // MG is same as FR (according to Nordea's list)
            _bbanStructures.Add("MG", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "c"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("MK", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(10, "c"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("MT", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(18, "c")));

            _bbanStructures.Add("MR", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("MU", new BBanStructure(BBanEntry.BankCode(6, "c"),
                                                        BBanEntry.BranchCode(2, "n"),
                                                        BBanEntry.AccountNumber(18, "c")));

            _bbanStructures.Add("MD", new BBanStructure(BBanEntry.BankCode(2, "c"),
                                                        BBanEntry.AccountNumber(18, "c")));

            _bbanStructures.Add("MC", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "c"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("ME", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(13, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("NL", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("NO", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumber(6, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n")));

            _bbanStructures.Add("PK", new BBanStructure(BBanEntry.BankCode(4, "c"),
                                                        BBanEntry.AccountNumber(16, "n")));

            _bbanStructures.Add("PS", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(21, "c")));

            _bbanStructures.Add("PL", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n"),
                                                        BBanEntry.AccountNumber(16, "n")));

            _bbanStructures.Add("PT", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(11, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("QA", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(21, "c")));

            _bbanStructures.Add("RS", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(13, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));
            _bbanStructures.Add("RO", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("TL", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(14, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("TN", new BBanStructure(BBanEntry.BankCode(2, "n"),
                                                        BBanEntry.BranchCode(3, "n"),
                                                        BBanEntry.AccountNumber(15, "c")));

            _bbanStructures.Add("TR", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "c"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("SM", new BBanStructure(BBanEntry.NationalCheckDigit(1, "a"),
                                                        BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(12, "c")));

            _bbanStructures.Add("SA", new BBanStructure(BBanEntry.BankCode(2, "n"),
                                                        BBanEntry.AccountNumber(18, "c")));

            _bbanStructures.Add("SK", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumberPrefix(6, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("SI", new BBanStructure(BBanEntry.BankCode(2, "n"),
                                                        BBanEntry.BranchCode(3, "n"),
                                                        BBanEntry.AccountNumber(8, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("SE", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(17, "n")));

            _bbanStructures.Add("UA", new BBanStructure(BBanEntry.BankCode(6, "n"),
                                                        BBanEntry.AccountNumber(19, "n")));

            _bbanStructures.Add("VG", new BBanStructure(BBanEntry.BankCode(4, "c"),
                                                        BBanEntry.AccountNumber(16, "n")));

            _bbanStructures.Add("XK", new BBanStructure(BBanEntry.BankCode(2, "n"),
                                                        BBanEntry.BranchCode(2, "n"),
                                                        BBanEntry.AccountNumber(10, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));
        }
Esempio n. 4
0
        /// <summary>
        /// Loads BBANs structures definitions
        /// </summary>
        private static void loadStructures()
        {
            _bbanStructures = new SortedDictionary <string, BBanStructure>();


            _bbanStructures.Add("AD", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(12, "c")));

            _bbanStructures.Add("AE", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("AL", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("AT", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "n")));

            _bbanStructures.Add("AZ", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(20, "c")));

            _bbanStructures.Add("BA", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(3, "n"),
                                                        BBanEntry.AccountNumber(8, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("BE", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(7, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("BG", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountType(2, "n"),
                                                        BBanEntry.AccountNumber(8, "c")));

            _bbanStructures.Add("BH", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(14, "c")));

            _bbanStructures.Add("BR", new BBanStructure(BBanEntry.BankCode(8, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(10, "n"),
                                                        BBanEntry.AccountType(1, "a"),
                                                        BBanEntry.OwnerAccountNumber(1, "c")));

            _bbanStructures.Add("CF", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("CH", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.AccountNumber(12, "c")));

            _bbanStructures.Add("CI", new BBanStructure(BBanEntry.BankCode(1, "a"),
                                                        BBanEntry.AccountNumber(23, "n")));

            _bbanStructures.Add("CM", new BBanStructure(BBanEntry.AccountNumber(23, "n")));

            _bbanStructures.Add("CR", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumber(14, "n")));

            _bbanStructures.Add("CY", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("CZ", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumberPrefix(6, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("DE", new BBanStructure(BBanEntry.BankCode(8, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("DK", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("DO", new BBanStructure(BBanEntry.BankCode(4, "c"),
                                                        BBanEntry.AccountNumber(20, "n")));

            _bbanStructures.Add("EE", new BBanStructure(BBanEntry.BankCode(2, "n"),
                                                        BBanEntry.BranchCode(2, "n"),
                                                        BBanEntry.AccountNumber(11, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n")));

            _bbanStructures.Add("ES", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));
            //Bank code is 3 and account number 10 + 1 check digit (11)
            _bbanStructures.Add("FI", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(3, "n"),
                                                        BBanEntry.AccountNumber(7, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n")));

            _bbanStructures.Add("FO", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumber(9, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n")));

            _bbanStructures.Add("FR", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "c"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("GA", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "c"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("GB", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.BranchCode(6, "n"),
                                                        BBanEntry.AccountNumber(8, "n")));

            _bbanStructures.Add("GE", new BBanStructure(BBanEntry.BankCode(2, "a"),
                                                        BBanEntry.AccountNumber(16, "n")));

            _bbanStructures.Add("GI", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(15, "c")));

            _bbanStructures.Add("GL", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("GR", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("GT", new BBanStructure(BBanEntry.BankCode(4, "c"),
                                                        BBanEntry.AccountNumber(20, "c")));

            _bbanStructures.Add("HR", new BBanStructure(BBanEntry.BankCode(7, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("HU", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(16, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n")));

            _bbanStructures.Add("IE", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.BranchCode(6, "n"),
                                                        BBanEntry.AccountNumber(8, "n")));

            _bbanStructures.Add("IL", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(3, "n"),
                                                        BBanEntry.AccountNumber(13, "n")));

            //account number should be 18 and no brach code
            _bbanStructures.Add("IS", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.BranchCode(2, "n"),
                                                        BBanEntry.AccountNumber(6, "n"),
                                                        BBanEntry.IdentificationNumber(10, "n")));

            _bbanStructures.Add("IT", new BBanStructure(BBanEntry.NationalCheckDigit(1, "a"),
                                                        BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(12, "c")));

            _bbanStructures.Add("KW", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(22, "c")));

            _bbanStructures.Add("KZ", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(13, "c")));

            _bbanStructures.Add("LB", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumber(20, "c")));

            _bbanStructures.Add("LI", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.AccountNumber(12, "c")));

            _bbanStructures.Add("LT", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "n")));

            _bbanStructures.Add("LU", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(13, "c")));

            _bbanStructures.Add("LV", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(13, "c")));

            _bbanStructures.Add("LY", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(3, "n"),
                                                        BBanEntry.AccountNumber(115, "c")));

            _bbanStructures.Add("MC", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "c"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("MD", new BBanStructure(BBanEntry.BankCode(2, "c"),
                                                        BBanEntry.AccountNumber(18, "c")));

            _bbanStructures.Add("ME", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(13, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));


            _bbanStructures.Add("MK", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(10, "c"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("MR", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("MT", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(18, "c")));


            _bbanStructures.Add("MU", new BBanStructure(BBanEntry.BankCode(6, "c"),
                                                        BBanEntry.BranchCode(2, "n"),
                                                        BBanEntry.AccountNumber(18, "c")));

            _bbanStructures.Add("NL", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("NO", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumber(6, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n")));

            _bbanStructures.Add("PK", new BBanStructure(BBanEntry.BankCode(4, "c"),
                                                        BBanEntry.AccountNumber(16, "n")));

            _bbanStructures.Add("PL", new BBanStructure(BBanEntry.BranchCode(8, "n"),
                                                        BBanEntry.AccountNumber(16, "n")));

            _bbanStructures.Add("PS", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(21, "c")));

            _bbanStructures.Add("PT", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(11, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("RO", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("RS", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(13, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("SA", new BBanStructure(BBanEntry.BankCode(2, "n"),
                                                        BBanEntry.AccountNumber(18, "c")));

            _bbanStructures.Add("SE", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(17, "n")));

            _bbanStructures.Add("SI", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(0, "n"),
                                                        BBanEntry.AccountNumber(8, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("SK", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.AccountNumberPrefix(6, "n"),
                                                        BBanEntry.AccountNumber(10, "n")));

            _bbanStructures.Add("SM", new BBanStructure(BBanEntry.NationalCheckDigit(1, "a"),
                                                        BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(12, "c")));

            _bbanStructures.Add("TN", new BBanStructure(BBanEntry.BankCode(2, "n"),
                                                        BBanEntry.BranchCode(3, "n"),
                                                        BBanEntry.AccountNumber(15, "c")));

            _bbanStructures.Add("TR", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "c"),
                                                        BBanEntry.AccountNumber(16, "c")));


            _bbanStructures.Add("VG", new BBanStructure(BBanEntry.BankCode(4, "c"),
                                                        BBanEntry.AccountNumber(16, "n")));

            //no branch code is defined
            _bbanStructures.Add("JO", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(18, "c")));

            _bbanStructures.Add("QA", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(21, "c")));
            //defined as account number 16 but starting at pos. 5 after checksum, i.e.
            //swift account number definition includes the bank code (2) and branch code(2)
            _bbanStructures.Add("XK", new BBanStructure(BBanEntry.BankCode(2, "n"),
                                                        BBanEntry.BranchCode(2, "n"),
                                                        BBanEntry.AccountNumber(10, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("TL", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(14, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            //defined as account number 24 (was 9)
            _bbanStructures.Add("LC", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(24, "c")));


            _bbanStructures.Add("UA", new BBanStructure(BBanEntry.BankCode(6, "n"),
                                                        BBanEntry.AccountNumber(19, "n")));


            _bbanStructures.Add("ST", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(11, "n"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            _bbanStructures.Add("SC", new BBanStructure(BBanEntry.BankCode(6, "c"),
                                                        BBanEntry.BranchCode(2, "n"),
                                                        BBanEntry.AccountNumber(19, "c")));

            _bbanStructures.Add("IQ", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.BranchCode(3, "n"),
                                                        BBanEntry.AccountNumber(12, "n")));
            //defined as account number 20 was (9)
            _bbanStructures.Add("SV", new BBanStructure(BBanEntry.BankCode(4, "a"),
                                                        BBanEntry.AccountNumber(20, "n")));


            // since 2017
            _bbanStructures.Add("BY", new BBanStructure(BBanEntry.BankCode(4, "c"),
                                                        BBanEntry.BalanceAccountNumber(4, "n"),
                                                        BBanEntry.AccountNumber(16, "c")));

            _bbanStructures.Add("VA", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.AccountNumber(15, "n")));

            // MG is same as FR (according to Nordea's list)
            _bbanStructures.Add("MG", new BBanStructure(BBanEntry.BankCode(5, "n"),
                                                        BBanEntry.BranchCode(5, "n"),
                                                        BBanEntry.AccountNumber(11, "c"),
                                                        BBanEntry.NationalCheckDigit(2, "n")));

            /* NOT FOUND IN SWIFT */
            //https://bank.codes/iban/structure/iran/
            _bbanStructures.Add("IR", new BBanStructure(BBanEntry.AccountNumber(22, "n")));

            _bbanStructures.Add("EG", new BBanStructure(BBanEntry.BankCode(4, "n"),
                                                        BBanEntry.BranchCode(4, "n"),
                                                        BBanEntry.AccountNumber(17, "n")));

            _bbanStructures.Add("AX", new BBanStructure(BBanEntry.BankCode(3, "n"),
                                                        BBanEntry.BranchCode(3, "n"),
                                                        BBanEntry.AccountNumber(7, "n"),
                                                        BBanEntry.NationalCheckDigit(1, "n")));

            //Algeria
            _bbanStructures.Add("DZ", new BBanStructure(BBanEntry.AccountNumber(20, "n")));

            //Angola
            _bbanStructures.Add("AO", new BBanStructure(BBanEntry.AccountNumber(21, "n")));

            //Benin
            _bbanStructures.Add("BJ", new BBanStructure(BBanEntry.BankCode(1, "a"),
                                                        BBanEntry.AccountNumber(23, "n")));

            //Burkina Faso
            _bbanStructures.Add("BF", new BBanStructure(BBanEntry.AccountNumber(23, "n")));

            //Burundi
            _bbanStructures.Add("BI", new BBanStructure(BBanEntry.AccountNumber(12, "n")));

            //Cameroon
            _bbanStructures.Add("CM", new BBanStructure(BBanEntry.AccountNumber(23, "n")));

            //Cape Verde
            _bbanStructures.Add("CV", new BBanStructure(BBanEntry.AccountNumber(21, "n")));

            //Mali
            _bbanStructures.Add("ML", new BBanStructure(BBanEntry.BankCode(1, "a"),
                                                        BBanEntry.AccountNumber(23, "n")));

            //Mozambique
            _bbanStructures.Add("MZ", new BBanStructure(BBanEntry.AccountNumber(21, "n")));

            //Senegal
            _bbanStructures.Add("SN", new BBanStructure(BBanEntry.BankCode(1, "a"),
                                                        BBanEntry.AccountNumber(23, "n")));
        }