Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
119
Task/IBAN/C-sharp/iban-1.cs
Normal file
119
Task/IBAN/C-sharp/iban-1.cs
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
public class IbanValidator : IValidateTypes
|
||||
{
|
||||
public ValidationResult Validate(string value)
|
||||
{
|
||||
// Check if value is missing
|
||||
if (string.IsNullOrEmpty(value))
|
||||
return ValidationResult.ValueMissing;
|
||||
|
||||
if (value.Length < 2)
|
||||
return ValidationResult.ValueTooSmall;
|
||||
|
||||
var countryCode = value.Substring(0, 2).ToUpper();
|
||||
|
||||
int lengthForCountryCode;
|
||||
|
||||
var countryCodeKnown = Lengths.TryGetValue(countryCode, out lengthForCountryCode);
|
||||
if (!countryCodeKnown)
|
||||
{
|
||||
return ValidationResult.CountryCodeNotKnown;
|
||||
}
|
||||
|
||||
// Check length.
|
||||
if (value.Length < lengthForCountryCode)
|
||||
return ValidationResult.ValueTooSmall;
|
||||
|
||||
if (value.Length > lengthForCountryCode)
|
||||
return ValidationResult.ValueTooBig;
|
||||
|
||||
value = value.ToUpper();
|
||||
var newIban = value.Substring(4) + value.Substring(0, 4);
|
||||
|
||||
newIban = Regex.Replace(newIban, @"\D", match => (match.Value[0] - 55).ToString());
|
||||
|
||||
var remainder = BigInteger.Parse(newIban) % 97;
|
||||
|
||||
if (remainder != 1)
|
||||
return ValidationResult.ValueFailsModule97Check;
|
||||
|
||||
return ValidationResult.IsValid;
|
||||
}
|
||||
|
||||
public enum ValidationResult
|
||||
{
|
||||
IsValid,
|
||||
ValueMissing,
|
||||
ValueTooSmall,
|
||||
ValueTooBig,
|
||||
ValueFailsModule97Check,
|
||||
CountryCodeNotKnown
|
||||
}
|
||||
|
||||
private static readonly IDictionary<string, int> Lengths = new Dictionary<string, int>
|
||||
{
|
||||
{"AL", 28},
|
||||
{"AD", 24},
|
||||
{"AT", 20},
|
||||
{"AZ", 28},
|
||||
{"BE", 16},
|
||||
{"BH", 22},
|
||||
{"BA", 20},
|
||||
{"BR", 29},
|
||||
{"BG", 22},
|
||||
{"CR", 21},
|
||||
{"HR", 21},
|
||||
{"CY", 28},
|
||||
{"CZ", 24},
|
||||
{"DK", 18},
|
||||
{"DO", 28},
|
||||
{"EE", 20},
|
||||
{"FO", 18},
|
||||
{"FI", 18},
|
||||
{"FR", 27},
|
||||
{"GE", 22},
|
||||
{"DE", 22},
|
||||
{"GI", 23},
|
||||
{"GR", 27},
|
||||
{"GL", 18},
|
||||
{"GT", 28},
|
||||
{"HU", 28},
|
||||
{"IS", 26},
|
||||
{"IE", 22},
|
||||
{"IL", 23},
|
||||
{"IT", 27},
|
||||
{"KZ", 20},
|
||||
{"KW", 30},
|
||||
{"LV", 21},
|
||||
{"LB", 28},
|
||||
{"LI", 21},
|
||||
{"LT", 20},
|
||||
{"LU", 20},
|
||||
{"MK", 19},
|
||||
{"MT", 31},
|
||||
{"MR", 27},
|
||||
{"MU", 30},
|
||||
{"MC", 27},
|
||||
{"MD", 24},
|
||||
{"ME", 22},
|
||||
{"NL", 18},
|
||||
{"NO", 15},
|
||||
{"PK", 24},
|
||||
{"PS", 29},
|
||||
{"PL", 28},
|
||||
{"PT", 25},
|
||||
{"RO", 24},
|
||||
{"SM", 27},
|
||||
{"SA", 24},
|
||||
{"RS", 22},
|
||||
{"SK", 24},
|
||||
{"SI", 19},
|
||||
{"ES", 24},
|
||||
{"SE", 24},
|
||||
{"CH", 21},
|
||||
{"TN", 24},
|
||||
{"TR", 26},
|
||||
{"AE", 23},
|
||||
{"GB", 22},
|
||||
{"VG", 24}
|
||||
};
|
||||
}
|
||||
100
Task/IBAN/C-sharp/iban-2.cs
Normal file
100
Task/IBAN/C-sharp/iban-2.cs
Normal file
|
|
@ -0,0 +1,100 @@
|
|||
public class When_the_IbanValidator_is_told_to_Validate
|
||||
{
|
||||
[Fact]
|
||||
public void It_should_return_an_error_when_there_is_no_value_provided()
|
||||
{
|
||||
// Assert
|
||||
const string value = "";
|
||||
var validator = new IbanValidator();
|
||||
|
||||
// Act
|
||||
var result = validator.Validate(value);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ValidationResult.ValueMissing, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_should_return_an_error_when_the_value_length_is_to_short()
|
||||
{
|
||||
// Assert
|
||||
const string value = "BE1800165492356";
|
||||
var validator = new IbanValidator();
|
||||
|
||||
// Act
|
||||
var result = validator.Validate(value);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ValidationResult.ValueTooSmall, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_should_return_an_error_when_the_value_length_is_to_big()
|
||||
{
|
||||
// Assert
|
||||
const string value = "BE180016549235656";
|
||||
var validator = new IbanValidator();
|
||||
|
||||
// Act
|
||||
var result = validator.Validate(value);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ValidationResult.ValueTooBig, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_should_return_an_error_when_the_value_fails_the_module_check()
|
||||
{
|
||||
// Assert
|
||||
const string value = "BE18001654923566";
|
||||
var validator = new IbanValidator();
|
||||
|
||||
// Act
|
||||
var result = validator.Validate(value);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ValidationResult.ValueFailsModule97Check, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_should_return_an_error_when_an_unkown_country_prefix_used()
|
||||
{
|
||||
// Assert
|
||||
const string value = "XX82WEST12345698765432";
|
||||
var validator = new IbanValidator();
|
||||
|
||||
// Act
|
||||
var result = validator.Validate(value);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ValidationResult.CountryCodeNotKnown, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_should_return_valid_when_a_valid_value_is_provided()
|
||||
{
|
||||
// Assert
|
||||
const string value = "BE18001654923565";
|
||||
var validator = new IbanValidator();
|
||||
|
||||
// Act
|
||||
var result = validator.Validate(value);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ValidationResult.IsValid, result);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void It_should_return_valid_when_a_valid_foreign_value_is_provided()
|
||||
{
|
||||
// Assert
|
||||
const string value = "GB82WEST12345698765432";
|
||||
var validator = new IbanValidator();
|
||||
|
||||
// Act
|
||||
var result = validator.Validate(value);
|
||||
|
||||
// Assert
|
||||
Assert.Equal(ValidationResult.IsValid, result);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue