/// <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); }
/// <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); }
/// <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)); }
/// <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); }