Пример #1
0
        /// <summary>
        /// Calculates the check digit for a given account number.
        /// </summary>
        /// <param name="accountNumber">The account number.</param>
        /// <returns></returns>
        virtual public string CalculateCheckDigit(string accountNumber)
        {
            var calculatedCheckDigit = ValidationMethodsTools.CalculateModulo(accountNumber, 97).ToString();

            Log.InfoFormat("Check digits for number {0} are {1}", accountNumber, calculatedCheckDigit);

            return(calculatedCheckDigit);
        }
Пример #2
0
        /// <summary>
        /// converts the parts of a national account number to an IBAN.
        /// There are different parts needed in dependency of the selected country
        /// </summary>
        /// <param name="nationalAccountNumber">The national account number.</param>
        /// <returns></returns>
        public override string ToIBAN(NationalAccountNumber nationalAccountNumber)
        {
            if (nationalAccountNumber == null)
            {
                throw new ArgumentNullException("nationalAccountNumber");
            }

            var abAccountNumber = CreateInstance(nationalAccountNumber);

            var bankCode          = OnlyAllowedCharacters(abAccountNumber.BankCode);
            var accountNumber     = OnlyAllowedCharacters(abAccountNumber.AccountNumber);
            var branch            = OnlyAllowedCharacters(abAccountNumber.Branch);
            var holdersNationalId = OnlyAllowedCharacters(abAccountNumber.HoldersNationalId);

            if (String.IsNullOrEmpty(bankCode))
            {
                throw new ArgumentException("The bank code is missing.");
            }
            if (String.IsNullOrEmpty(branch))
            {
                throw new ArgumentException("The branch code is missing.");
            }
            if (String.IsNullOrEmpty(accountNumber))
            {
                throw new ArgumentException("The account number is missing.");
            }
            if (String.IsNullOrEmpty(holdersNationalId))
            {
                throw new ArgumentException("The holders national id is missing.");
            }

            var bban = String.Format(BBANFormatString, bankCode, branch, accountNumber, holdersNationalId);

            bban = bban.Replace(' ', '0');
            bban = ConvertCharactersToNumbers(bban);

            Log.DebugFormat("calculating checksum for bban {0}", bban);

            var modulo = 98 - ValidationMethodsTools.CalculateModulo(bban, 97);
            var iban   = String.Format(IBANFormatString, IBANPrefix, modulo, bankCode, branch, accountNumber, holdersNationalId);

            iban = iban.Replace(' ', '0');

            Log.DebugFormat("generated IBAN: {0}", iban);

            if (iban.Length != IBANLength)
            {
                throw new InvalidOperationException(String.Format("Couldn't generate a valid IBAN from the bankcode {0}, branch {1}, the account number {2} and the national holders id {3}.", bankCode, branch, accountNumber, holdersNationalId));
            }

            return(iban);
        }
Пример #3
0
        /// <summary>
        /// Determines whether the specified account number is valid.
        /// </summary>
        /// <param name="accountNumber">The account number.</param>
        /// <returns>
        ///   <c>true</c> if the specified account number is valid; otherwise, <c>false</c>.
        /// </returns>
        virtual public bool IsValid(string accountNumber)
        {
            string number;
            string checkdigit;

            ValidationMethodsTools.SplitNumber(accountNumber, 2, out number, out checkdigit);

            var calculatedCheckDigit = ValidationMethodsTools.CalculateModulo(number, 97).ToString("00");

            Log.InfoFormat("Validate {0} against check digits {1}, calculated check digits {2}", number, checkdigit, calculatedCheckDigit);

            return(calculatedCheckDigit.Equals(checkdigit));
        }
Пример #4
0
        /// <summary>
        /// converts the parts of a national account number to an IBAN.
        /// There are different parts needed in dependency of the selected country
        /// </summary>
        /// <param name="nationalAccountNumber">The national account number.</param>
        /// <returns></returns>
        public override string ToIBAN(NationalAccountNumber nationalAccountNumber)
        {
            if (nationalAccountNumber == null)
            {
                throw new ArgumentNullException("nationalAccountNumber");
            }

            var abAccountNumber = CreateInstance(nationalAccountNumber);

            var bic           = OnlyAllowedCharacters(abAccountNumber.BIC);
            var accountNumber = OnlyAllowedCharacters(abAccountNumber.AccountNumber);

            if (String.IsNullOrEmpty(bic))
            {
                throw new ArgumentException("The bic is missing.");
            }
            if (String.IsNullOrEmpty(accountNumber))
            {
                throw new ArgumentException("The account number is missing.");
            }

            var bban = String.Format(BBANFormatString, bic, accountNumber);

            bban = bban.Replace(' ', '0');
            bban = ConvertCharactersToNumbers(bban);

            Log.DebugFormat("calculating checksum for bban {0}", bban);

            var modulo = 98 - ValidationMethodsTools.CalculateModulo(bban, 97);
            var iban   = String.Format(IBANFormatString, IBANPrefix, modulo, bic, accountNumber);

            iban = iban.Replace(' ', '0');

            Log.DebugFormat("generated IBAN: {0}", iban);

            if (iban.Length != IBANLength)
            {
                throw new InvalidOperationException(String.Format("Couldn't generate a valid IBAN from the bic {0} and the account number {1}.", bic, accountNumber));
            }

            return(iban);
        }