Beispiel #1
0
        public static void Create1(string value, string bban)
        {
            var parts  = IbanParts.Parse(value).Value;
            var result = IbanParts.Create("FR", "34", bban);

            Assert.Equal(parts, result);
        }
Beispiel #2
0
        public static void Parse5(string value, string bban)
        {
            var parts = IbanParts.Parse(value).Value;

            Assert.Equal("FR", parts.CountryCode);
            Assert.Equal("34", parts.CheckDigits);
            Assert.Equal(bban, parts.Bban);
        }
Beispiel #3
0
        public static void Build1(string value)
        {
            // NB: We must use actual IBANs since Build() will compute the checksum.
            var parts  = IbanParts.Parse(value).Value;
            var result = IbanParts.Build(parts.CountryCode, parts.Bban);

            Assert.Equal(parts, result);
        }
Beispiel #4
0
        public static Iban Create(string countryCode, string checkDigits, string bban, IbanValidationLevels levels)
        {
            var parts = IbanParts.Create(countryCode, checkDigits, bban);

            IbanValidator.TryValidate(parts, levels)
            .OnError(err => { throw new ArgumentException(err); });

            return(new Iban(parts, levels));
        }
Beispiel #5
0
        public static void TryParse3(string value)
        {
            var result = IbanParts.TryParse(value);

            Assert.True(result.IsError);

#if !NO_INTERNALS_VISIBLE_TO
            result.OnError(err => Assert.Equal(Format.Current(Strings.InvalidInput_CheckDigits, value), err));
#endif
        }
Beispiel #6
0
        public static Outcome <Iban> TryParse(string value, IbanStyles styles, IbanValidationLevels levels)
        {
            if (value == null)
            {
                return(Outcome <Iban> .FromError(Format.Current(Strings.InvalidIbanValue, value)));
            }

            string input = PreprocessInput(value, styles);

            return(from val in IbanParts.TryParse(input)
                   where IbanValidator.TryValidate(val, levels)
                   select new Iban(val, levels));
        }
Beispiel #7
0
        public static void TryParse5(string value, string expectedBban)
        {
            var parts = IbanParts.TryParse(value);

            var countryCode = parts.Select(x => x.CountryCode);

            Assert.True(countryCode.Contains("FR"));

            var checkDigits = parts.Select(x => x.CheckDigits);

            Assert.True(checkDigits.Contains("34"));

            var bban = parts.Select(x => x.Bban);

            Assert.True(bban.Contains(expectedBban));
        }
Beispiel #8
0
        public Outcome TryValidate(IbanParts parts)
        {
            if (_verifyIntegrity && !VerifyIntegrity(parts))
            {
                return(Outcome.FromError(
                           Format.Current(Strings.IbanIntegrityCheckFailure, parts.LiteralValue)));
            }
            if (_verifyISOCountryCode && !VerifyISOCountryCode(parts))
            {
                return(Outcome.FromError(
                           Format.Current(Strings.UnknownISOCountryCode, parts.CountryCode)));
            }
            if (_verifyBban && !VerifyBban(parts))
            {
                return(Outcome.FromError(
                           Format.Current(Strings.BbanVerificationFailure, parts.Bban)));
            }

            return(Outcome.Ok);
        }
Beispiel #9
0
        // WARNING: Throws for ill-formed values (invalid length and characters).
        public static int ComputeInt64Checksum(string value)
        {
            Require.NotNull(value, nameof(value));
            Require.Range(IbanParts.CheckLength(value), nameof(value));

            // 922 337 203 685 477 579
            const long MAX_DIGIT = (Int64.MaxValue - 9) / 10;
            // 92 233 720 368 547 757
            const long MAX_LETTER = (Int64.MaxValue - 35) / 100;

            int  len      = value.Length;
            long checksum = 0L;

            for (var i = 0; i < len; i++)
            {
                char ch = i < len - 4 ? value[i + 4] : value[(i + 4) % len];
                if (ch >= '0' && ch <= '9')
                {
                    if (checksum > MAX_DIGIT)
                    {
                        checksum = checksum % MODULUS;
                    }
                    checksum = 10 * checksum + (ch - '0');
                }
                else if (ch >= 'A' && ch <= 'Z')
                {
                    if (checksum > MAX_LETTER)
                    {
                        checksum = checksum % MODULUS;
                    }
                    checksum = 100 * checksum + (ch - 'A' + 10);
                }
                else
                {
                    throw new ArgumentException(
                              Format.Current(Strings.IbanValueIsNotWellFormed, value), nameof(value));
                }
            }

            return((int)(checksum % MODULUS));
        }
Beispiel #10
0
        public static Iban?Parse(string value, IbanStyles styles, IbanValidationLevels levels)
        {
            if (value == null)
            {
                return(null);
            }

            var val = PreprocessInput(value, styles);

            var parts = IbanParts.Parse(val);

            if (!parts.HasValue)
            {
                return(null);
            }

            if (!IbanValidator.Validate(parts.Value, levels))
            {
                return(null);
            }

            return(new Iban(parts.Value, levels));
        }
Beispiel #11
0
 public static void Create0a()
 {
     Assert.Throws <ArgumentNullException>("countryCode", () => IbanParts.Create(null, "14", "20041010050500013M02606"));
     Assert.Throws <ArgumentNullException>("checkDigits", () => IbanParts.Create("FR", null, "20041010050500013M02606"));
     Assert.Throws <ArgumentNullException>("bban", () => IbanParts.Create("FR", "14", null));
 }
Beispiel #12
0
 public bool Validate(IbanParts parts)
 => (!_verifyIntegrity || VerifyIntegrity(parts)) &&
 (!_verifyISOCountryCode || VerifyISOCountryCode(parts)) &&
 (!_verifyBban || VerifyBban(parts));
Beispiel #13
0
        public static void Compute3(string value)
        {
            var iban = IbanParts.Parse(value).Value;

            Assert.Equal(iban.CheckDigits, IbanCheckDigits.Compute(iban.CountryCode, iban.Bban, true));
        }
Beispiel #14
0
 public static void Parse4(string value) => Assert.Null(IbanParts.Parse(value));
Beispiel #15
0
 public static bool VerifyISOCountryCode(IbanParts parts)
 => CountryISOCodes.TwoLetterCodeExists(parts.CountryCode);
Beispiel #16
0
 public static void Parse1()
 {
     Assert.Null(IbanParts.Parse(null));
     Assert.False(IbanParts.TryParse(null).IsSuccess);
 }
Beispiel #17
0
 public static void Parse3(string value)
 {
     Assert.NotNull(IbanParts.Parse(value));
     Assert.True(IbanParts.TryParse(value).IsSuccess);
 }
Beispiel #18
0
 public static bool VerifyBban(IbanParts parts)
 {
     throw new NotImplementedException("BBAN validation is still in the work.");
 }
Beispiel #19
0
 public static void Create2(string value)
 => Assert.DoesNotThrow(() => IbanParts.Create("FR", "14", value));
Beispiel #20
0
 public static Outcome TryValidate(IbanParts parts, IbanValidationLevels levels)
 => new IbanValidator(levels).TryValidate(parts);
Beispiel #21
0
 public static void Create0d(string value)
 => Assert.Throws <ArgumentException>("bban", () => IbanParts.Create("FR", "14", value));
Beispiel #22
0
 public static bool VerifyIntegrity(IbanParts parts) => IbanCheckDigits.Verify(parts.LiteralValue);
Beispiel #23
0
 private Iban(IbanParts parts, IbanValidationLevels levels)
 {
     _parts             = parts;
     VerificationLevels = levels;
 }
Beispiel #24
0
 public static void Build2(string value)
 => Assert.DoesNotThrow(() => IbanParts.Build("FR", value));
Beispiel #25
0
 public static void Build0a()
 {
     Assert.Throws <ArgumentNullException>("countryCode", () => IbanParts.Build(null, "20041010050500013M02606"));
     Assert.Throws <ArgumentNullException>("bban", () => IbanParts.Build("FR", null));
 }
Beispiel #26
0
 public static void Build0c(string value)
 => Assert.Throws <ArgumentException>("bban", () => IbanParts.Build("FR", value));
Beispiel #27
0
        public static Iban Build(string countryCode, string bban)
        {
            var parts = IbanParts.Build(countryCode, bban);

            return(new Iban(parts, IbanValidationLevels.Integrity));
        }
Beispiel #28
0
 public static void Create0b(string value)
 => Assert.Throws <ArgumentException>("countryCode", () => IbanParts.Create(value, "14", "20041010050500013M02606"));
Beispiel #29
0
 public static void Create0c(string value)
 => Assert.Throws <ArgumentException>("checkDigits", () => IbanParts.Create("FR", value, "20041010050500013M02606"));
Beispiel #30
0
 public static bool Validate(IbanParts parts, IbanValidationLevels levels)
 => new IbanValidator(levels).Validate(parts);