/// <summary>
        /// Construct PlusGiro object
        /// </summary>
        /// <param name="plusGiro">PlusGiro account number. Hyphen optional.</param>
        public PlusGiro(string plusGiro)
        {
            _accountNumber = plusGiro;

            if (string.IsNullOrWhiteSpace(plusGiro))
            {
                _isValid          = false;
                _validationResult = ValidationResult.InvalidAccountNumberLength;
                return;
            }

            if (plusGiro.ToDigits() != plusGiro)
            {
                var parts = plusGiro.Split('-');
                if (parts.Length != 2 ||
                    (parts[0].ToDigits().Length < 1 || parts[0].ToDigits().Length > 7) ||
                    parts[1].ToDigits().Length != 1)
                {
                    _isValid          = false;
                    _validationResult = ValidationResult.InvalidFormat;
                    return;
                }
            }

            var accountNumber = plusGiro.ToDigits();

            if (accountNumber.Length < 2 || accountNumber.Length > 8)
            {
                _isValid          = false;
                _validationResult = ValidationResult.InvalidAccountNumberLength;
                return;
            }

            _isValid          = Modulus10.ValidateChecksum(accountNumber);
            _validationResult = _isValid
                ? ValidationResult.ChecksumValidated
                : ValidationResult.InvalidChecksum;
        }
        public void TestModulus10(string value, string expected)
        {
            var sut = Modulus10.GetChecksum(value);

            Assert.AreEqual(expected, sut);
        }
Ejemplo n.º 3
0
        private void Validate()
        {
            _accountConfiguration = Configuration
                                    .Configuration.GetConfigForClearingNumber(_clearingNumber);
            if (_accountConfiguration == null)
            {
                _validationResult = ValidationResult.UnknownClearingNumber;
                _isValid          = false;
                return;
            }

            _bank = _accountConfiguration.BankName;

            if (_accountConfiguration.BankAccountType == BankAccountType.Type1)
            {
                if (_clearingNumber.Length != 4)
                {
                    _validationResult = ValidationResult.InvalidClearingNumberLength;
                    _isValid          = false;
                    return;
                }

                if (_accountNumber.Length != 7)
                {
                    _validationResult = ValidationResult.InvalidAccountNumberLength;
                    _isValid          = false;
                    return;
                }

                if (_accountConfiguration.BankAccountTypeComment == BankAccountTypeComment.Type1)
                {
                    var number = _clearingNumber.Substring(1) + _accountNumber;
                    _isValid          = Modulus11.ValidateChecksum(number);
                    _validationResult =
                        _isValid ? ValidationResult.ChecksumValidated : ValidationResult.InvalidChecksum;
                    return;
                }
                if (_accountConfiguration.BankAccountTypeComment == BankAccountTypeComment.Type2)
                {
                    var number = _clearingNumber + _accountNumber;
                    _isValid          = Modulus11.ValidateChecksum(number);
                    _validationResult =
                        _isValid ? ValidationResult.ChecksumValidated : ValidationResult.InvalidChecksum;
                    return;
                }
            }

            if (_accountConfiguration.BankAccountType == BankAccountType.Type2)
            {
                if (_accountConfiguration.BankAccountTypeComment == BankAccountTypeComment.Type1)
                {
                    if (_accountNumber.Length != 10)
                    {
                        _isValid          = false;
                        _validationResult = ValidationResult.InvalidAccountNumberLength;
                        return;
                    }

                    var number = _accountNumber;
                    _isValid          = Modulus10.ValidateChecksum(number);
                    _validationResult =
                        _isValid ? ValidationResult.ChecksumValidated : ValidationResult.InvalidChecksum;

                    // Nordea personkonto
                    if (_clearingNumber == "3300")
                    {
                        var validPn = _accountNumber.IsValidPersonnummerSamordningsnummer();
                        _isValid          = _isValid && validPn;
                        _validationResult =
                            validPn ? _validationResult : ValidationResult.InvalidFormat;
                    }

                    return;
                }

                if (_accountConfiguration.BankAccountTypeComment == BankAccountTypeComment.Type2)
                {
                    var number = _accountNumber;
                    while (number.Length > 9)
                    {
                        number = number.Substring(1);
                    }
                    _isValid          = Modulus11.ValidateChecksum(number);
                    _validationResult =
                        _isValid ? ValidationResult.ChecksumValidated : ValidationResult.InvalidChecksum;
                    return;
                }

                // Swedbank & Sparbankerna
                if (_accountConfiguration.BankAccountTypeComment == BankAccountTypeComment.Type3 &&
                    _clearingNumber.StartsWith("8", StringComparison.Ordinal))
                {
                    if (!string.IsNullOrEmpty(_clearingCheckDigit))
                    {
                        _isValid = Modulus10.ValidateChecksum(_clearingNumber + _clearingCheckDigit);

                        if (!_isValid)
                        {
                            _validationResult = ValidationResult.InvalidClearingNumber;
                            return;
                        }
                    }

                    if (_accountNumber.Length < 1 || _accountNumber.Length > 10)
                    {
                        _isValid          = false;
                        _validationResult = ValidationResult.InvalidAccountNumberLength;
                        return;
                    }

                    var number = _accountNumber;
                    _isValid          = Modulus10.ValidateChecksum(number);
                    _validationResult =
                        _isValid ? ValidationResult.ChecksumValidated : ValidationResult.InvalidChecksum;
                    return;
                }

                if (_accountConfiguration.BankAccountTypeComment == BankAccountTypeComment.Type3 &&
                    !_clearingNumber.StartsWith("8", StringComparison.Ordinal))
                {
                    if (_accountNumber.Length < 1 || _accountNumber.Length > 10)
                    {
                        _isValid          = false;
                        _validationResult = ValidationResult.InvalidAccountNumberLength;
                        return;
                    }


                    var number = _accountNumber;
                    _isValid          = Modulus10.ValidateChecksum(number);
                    _validationResult =
                        _isValid ? ValidationResult.ChecksumValidated : ValidationResult.InvalidChecksum;

                    return;
                }
            }
        }