public static BankAccountNo CreateBankAccount(string clearingNumber, string accountNumber, IEnumerable <string> bankRegisterLines)
        {
            if (string.IsNullOrEmpty(clearingNumber))
            {
                throw new ArgumentException("clearingNumber must not be null or empty string.");
            }
            if (string.IsNullOrEmpty(accountNumber))
            {
                throw new ArgumentException("accountNumber must not be null or empty string.");
            }

            BankAccountNo bankAccount = new BankAccountNo();

            // Remove any redundant characters
            clearingNumber = AccountNumberValidator.Clean(clearingNumber);
            accountNumber  = AccountNumberValidator.Clean(accountNumber);

            // Assign clearing number
            AccountNumberValidator.CheckClearingNumber(clearingNumber);

            // Assign account type and bank
            var bankAndAccountNumberType = ClearingNumberData.GetBankAndAccountNumberType(clearingNumber, bankRegisterLines);

            if ((bankAccount.AccountNumberType = bankAndAccountNumberType.Item2) == AccountNumberType.Unknown)
            {
                throw new ArgumentException("Unknown clearingNumber. Could not match clearing number to a known bank.");
            }
            bankAccount.Bank = bankAndAccountNumberType.Item1;
            bankAccount.AccountNumberType = bankAndAccountNumberType.Item2;

            // Assign account number
            AccountNumberValidator.CheckAccountNumber(ref clearingNumber, ref accountNumber, bankAndAccountNumberType.Item2);
            bankAccount.AccountNumber  = accountNumber;
            bankAccount.ClearingNumber = clearingNumber;

            return(bankAccount);
        }