IBAN: Difference between revisions

2,833 bytes added ,  10 years ago
no edit summary
(Added COBOL solution.)
No edit summary
Line 778:
GB42 WEST 1234 5698 7654 32 is unverified
</pre>
 
=={{header|C#}}==
 
<lang c#>
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();
var lengthForCountryCode = _lengths[countryCode];
// 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 => ((int) match.Value[0] - 55).ToString());
 
var remainder = BigInteger.Parse(newIban) % 97;
 
if (remainder != 1)
return ValidationResult.ValueFailsModule97Check;
 
 
return ValidationResult.IsValid;
}
 
private static Dictionary<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}
};
}
</lang>
 
[[Category:Checksums]]