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); }
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); }
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); }
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)); }
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 }
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)); }
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)); }
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); }
// 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)); }
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)); }
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)); }
public bool Validate(IbanParts parts) => (!_verifyIntegrity || VerifyIntegrity(parts)) && (!_verifyISOCountryCode || VerifyISOCountryCode(parts)) && (!_verifyBban || VerifyBban(parts));
public static void Compute3(string value) { var iban = IbanParts.Parse(value).Value; Assert.Equal(iban.CheckDigits, IbanCheckDigits.Compute(iban.CountryCode, iban.Bban, true)); }
public static void Parse4(string value) => Assert.Null(IbanParts.Parse(value));
public static bool VerifyISOCountryCode(IbanParts parts) => CountryISOCodes.TwoLetterCodeExists(parts.CountryCode);
public static void Parse1() { Assert.Null(IbanParts.Parse(null)); Assert.False(IbanParts.TryParse(null).IsSuccess); }
public static void Parse3(string value) { Assert.NotNull(IbanParts.Parse(value)); Assert.True(IbanParts.TryParse(value).IsSuccess); }
public static bool VerifyBban(IbanParts parts) { throw new NotImplementedException("BBAN validation is still in the work."); }
public static void Create2(string value) => Assert.DoesNotThrow(() => IbanParts.Create("FR", "14", value));
public static Outcome TryValidate(IbanParts parts, IbanValidationLevels levels) => new IbanValidator(levels).TryValidate(parts);
public static void Create0d(string value) => Assert.Throws <ArgumentException>("bban", () => IbanParts.Create("FR", "14", value));
public static bool VerifyIntegrity(IbanParts parts) => IbanCheckDigits.Verify(parts.LiteralValue);
private Iban(IbanParts parts, IbanValidationLevels levels) { _parts = parts; VerificationLevels = levels; }
public static void Build2(string value) => Assert.DoesNotThrow(() => IbanParts.Build("FR", value));
public static void Build0a() { Assert.Throws <ArgumentNullException>("countryCode", () => IbanParts.Build(null, "20041010050500013M02606")); Assert.Throws <ArgumentNullException>("bban", () => IbanParts.Build("FR", null)); }
public static void Build0c(string value) => Assert.Throws <ArgumentException>("bban", () => IbanParts.Build("FR", value));
public static Iban Build(string countryCode, string bban) { var parts = IbanParts.Build(countryCode, bban); return(new Iban(parts, IbanValidationLevels.Integrity)); }
public static void Create0b(string value) => Assert.Throws <ArgumentException>("countryCode", () => IbanParts.Create(value, "14", "20041010050500013M02606"));
public static void Create0c(string value) => Assert.Throws <ArgumentException>("checkDigits", () => IbanParts.Create("FR", value, "20041010050500013M02606"));
public static bool Validate(IbanParts parts, IbanValidationLevels levels) => new IbanValidator(levels).Validate(parts);