示例#1
0
 public IbanFormatException(string message, IbanFormatViolation formatViolation, object actual, object expected )
     : base(message)
 {
     FormatViolation = formatViolation;
     ActualObject = actual;
     ExpectedObject = expected;
 }
示例#2
0
        /// <summary>
        /// Validation of IBAN string
        /// </summary>
        /// <param name="iban">Iban string</param>
        /// <param name="validationResult">Validation result</param>
        /// <returns>True if IBAN string is valid, false if it encounters any problem</returns>
        public static bool IsValid(string iban, out IbanFormatViolation validationResult)
        {
            bool result = false;
            validationResult = IbanFormatViolation.NO_VIOLATION;

            if (!string.IsNullOrEmpty(iban))
            {
                if (hasValidCountryCode(iban, out validationResult))
                {
                    if (hasValidCheckDigit( iban, out validationResult))
                    {
                        BBanStructure structure = getBbanStructure( iban );
                        if (hasValidBbanLength(iban, structure, out validationResult))
                        {
                            if (hasValidBbanEntries(iban, structure, out validationResult))
                            {
                                if (hasValidCheckDigitValue(iban, out validationResult))
                                {
                                    result = true;
                                }
                            }
                        }
                    }
                }
            }
            else
            {
                validationResult = IbanFormatViolation.IBAN_NOT_EMPTY_OR_NULL;
            }

            return result;
        }
示例#3
0
        public void IbanIsValidWithCountryCodeAndCheckDigitOnlyShouldReturnFalse()
        {
            IbanFormatViolation validationResult = IbanFormatViolation.NO_VIOLATION;

            Assert.IsFalse(IbanUtils.IsValid("CZ48", out validationResult));
        }
示例#4
0
        private static bool hasValidCountryCode(string iban, out IbanFormatViolation validationResult)
        {            
            validationResult = IbanFormatViolation.NO_VIOLATION;

            if (iban.Length < _COUNTRY_CODE_LENGTH)
            {
                validationResult = IbanFormatViolation.COUNTRY_CODE_TWO_LETTERS;
            }
            else
            {
                string countryCode = GetCountryCode( iban );
                if (!countryCode.Equals( countryCode.ToUpper() ) || !char.IsLetter( iban[0] ) || !char.IsLetter( iban[1] ))
                {
                    validationResult = IbanFormatViolation.COUNTRY_CODE_UPPER_CASE_LETTERS;
                }
                else
                {
                    CountryCodeEntry countryEntry = CountryCode.GetCountryCode( countryCode );
                    if (countryEntry == null)
                    {
                        validationResult = IbanFormatViolation.COUNTRY_CODE_EXISTS;
                    }
                    else
                    {
                        BBanStructure structure = Bban.GetStructureForCountry( countryEntry );
                        if (structure == null)
                        {
                            validationResult = IbanFormatViolation.COUNTRY_CODE_UNSUPPORTED;
                        }         
                    }
                }
            }

            return ( validationResult == IbanFormatViolation.NO_VIOLATION );
        }
示例#5
0
 public IbanFormatException(string message, IbanFormatViolation formatViolation, object actual) : base(message)
 {
     FormatViolation = formatViolation;
     ActualObject    = actual;
 }
示例#6
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);
        }
示例#7
0
        public void IbanIsValidWithValidIbanShouldReturnTrue()
        {
            IbanFormatViolation validationResult = IbanFormatViolation.NO_VIOLATION;

            Assert.IsTrue(IbanUtils.IsValid("CZ6508000000192000145399", out validationResult));
        }
示例#8
0
        public void IbanIsValidWithInvalidAccountNumberShouldReturnFalse()
        {
            IbanFormatViolation validationResult = IbanFormatViolation.NO_VIOLATION;

            Assert.IsFalse(IbanUtils.IsValid("DE8937040044053201300A", out validationResult));
        }
示例#9
0
        public void IbanIsValidWithInvalidLengthShouldReturnFalse()
        {
            IbanFormatViolation validationResult = IbanFormatViolation.NO_VIOLATION;

            Assert.IsFalse(IbanUtils.IsValid("AT621904300", out validationResult));
        }
示例#10
0
 public IbanFormatException(string message, IbanFormatViolation formatViolation)
     : base(message)
 {
     FormatViolation = formatViolation;
 }
示例#11
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 );
        }
示例#12
0
        private static bool hasValidBbanEntries(string iban, BBanStructure structure, out IbanFormatViolation validationResult)
        {            
            validationResult = IbanFormatViolation.NO_VIOLATION;

            string bban = GetBBan( iban );
            int bbanOffset = 0;

            foreach (BBanEntry entry in structure.Entries)
            {
                int entryLength = entry.Length;
                string entryValue = bban.Substring( bbanOffset, entryLength );

                bbanOffset += entryLength;
                
                if (!hasValidBbanEntryCharacterType(entry, entryValue, out validationResult))
                {             
                    break;
                }
            }

            return ( validationResult == IbanFormatViolation.NO_VIOLATION );
        }
示例#13
0
        private static bool hasValidBbanLength(string iban, BBanStructure structure, out IbanFormatViolation validationResult)
        {            
            validationResult = IbanFormatViolation.NO_VIOLATION;

            int expectedBbanLength = structure.GetBBanLength();
            string bban = GetBBan( iban );
            int bbanLength = bban.Length;

            if (expectedBbanLength != bbanLength)
            {
                validationResult = IbanFormatViolation.BBAN_LENGTH;
            }

            return ( validationResult == IbanFormatViolation.NO_VIOLATION );
        }
示例#14
0
        private static bool hasValidCheckDigit(string iban, out IbanFormatViolation validationResult)
        {
            validationResult = IbanFormatViolation.NO_VIOLATION;
            
            if ((iban.Length < ( _COUNTRY_CODE_LENGTH + _CHECK_DIGIT_LENGTH )))
            {
                validationResult = IbanFormatViolation.CHECK_DIGIT_TWO_DIGITS;                
            }
            else
            {
                string checkDigit = GetCheckDigit( iban );
                if (!char.IsDigit( checkDigit[0] ) || !char.IsDigit( checkDigit[1] ))
                {
                    validationResult = IbanFormatViolation.CHECK_DIGIT_ONLY_DIGITS;
                }            
            }

            return (validationResult == IbanFormatViolation.NO_VIOLATION);
        }
示例#15
0
        public void IbanIsValidWithEmptyCountryCodeShouldReturnFalse()
        {
            IbanFormatViolation validationResult = IbanFormatViolation.NO_VIOLATION;

            Assert.IsFalse(IbanUtils.IsValid(" _6508000000192000145399", out validationResult));
        }
示例#16
0
        public void IbanIsValidWithNonExistingCountryShouldReturnFalse()
        {
            IbanFormatViolation validationResult = IbanFormatViolation.NO_VIOLATION;

            Assert.IsFalse(IbanUtils.IsValid("JJ611904300234573201", out validationResult));
        }
示例#17
0
 public IbanFormatException(string message, IbanFormatViolation formatViolation, char invalidCharacter)
     : base(message)
 {
     FormatViolation = formatViolation;
     InvalidCharacter = invalidCharacter;
 }
示例#18
0
        public void IbanIsValidWithInvalidBankCodeShouldReturnFalse()
        {
            IbanFormatViolation validationResult = IbanFormatViolation.NO_VIOLATION;

            Assert.IsFalse(IbanUtils.IsValid("AT611C04300234573201", out validationResult));
        }
示例#19
0
 public IbanFormatException(string message, IbanFormatViolation formatViolation, char invalidCharacter, BBanEntryType entryType, object actual)
     : base(message)
 {
     FormatViolation = formatViolation;
     InvalidCharacter = invalidCharacter;
     BBanEntryType = entryType;
     ActualObject = actual;
 }
示例#20
0
        public void IbanIsValidWithInvalidNationalCheckDigitShouldReturnFalse()
        {
            IbanFormatViolation validationResult = IbanFormatViolation.NO_VIOLATION;

            Assert.IsFalse(IbanUtils.IsValid("IT6010542811101000000123456", out validationResult));
        }
示例#21
0
        public void IbanIsValidWithEmptyIBANShouldReturnFalse()
        {
            IbanFormatViolation validationResult = IbanFormatViolation.NO_VIOLATION;

            Assert.IsFalse(IbanUtils.IsValid("", out validationResult));
        }
示例#22
0
        private static bool hasValidBbanEntries(string iban, BBanStructure structure, out IbanFormatViolation validationResult)
        {
            validationResult = IbanFormatViolation.NO_VIOLATION;

            string bban       = GetBBan(iban);
            int    bbanOffset = 0;

            foreach (BBanEntry entry in structure.Entries)
            {
                int    entryLength = entry.Length;
                string entryValue  = bban.Substring(bbanOffset, entryLength);

                bbanOffset += entryLength;

                if (!hasValidBbanEntryCharacterType(entry, entryValue, out validationResult))
                {
                    break;
                }
            }

            return(validationResult == IbanFormatViolation.NO_VIOLATION);
        }
示例#23
0
        public void IbanIsValidWithOneCharStringShouldReturnFalse()
        {
            IbanFormatViolation validationResult = IbanFormatViolation.NO_VIOLATION;

            Assert.IsFalse(IbanUtils.IsValid("A", out validationResult));
        }
示例#24
0
 public IbanFormatException(string message, IbanFormatViolation formatViolation) : base(message)
 {
     FormatViolation = formatViolation;
 }
示例#25
0
        public void IbanIsValidWithNonDigitCheckDigitShouldReturnFalse()
        {
            IbanFormatViolation validationResult = IbanFormatViolation.NO_VIOLATION;

            Assert.IsFalse(IbanUtils.IsValid("CZ4T", out validationResult));
        }
示例#26
0
 public IbanFormatException(string message, IbanFormatViolation formatViolation, char invalidCharacter) : base(message)
 {
     FormatViolation  = formatViolation;
     InvalidCharacter = invalidCharacter;
 }
示例#27
0
        private static bool hasValidCheckDigitValue(string iban, out IbanFormatViolation validationResult)
        {
            validationResult = IbanFormatViolation.NO_VIOLATION;

            if (calculateMod( iban ) != 1)
            {
                validationResult = IbanFormatViolation.IBAN_INVALID_CHECK_DIGIT_VALUE;
            }

            return ( validationResult == IbanFormatViolation.NO_VIOLATION );
        }