IBAN: Difference between revisions

1,109 bytes added ,  9 years ago
m
Added Sidef language
m (Added Sidef language)
Line 2,246:
Valid GB82 WEST 1243 5698 7654 32: FALSE
</pre>
 
=={{header|Sidef}}==
<lang ruby>func valid_iban(iban) {
static len = Hash.new(
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,
);
 
# Ensure upper alphanumeric input.
iban -= /\s+/g;
iban ~~ /^[0-9A-Z]+\z/ || return false;
 
# Validate country code against expected length.
var cc = iban.substr(0, 2).uc;
iban.len == len[cc] || return false;
 
# Shift and convert.
iban.sub!(/(.{4})(.+)/, {|a,b| b+a});
iban.gsub!(/([A-Z])/, {|a| a.ord - 55});
 
iban.to_i % 97 == 1;
}
 
say valid_iban("GB82 WEST 1234 5698 7654 32"); #=> true
say valid_iban("GB82 TEST 1234 5698 7654 32"); #=> false</lang>
 
=={{header|Tcl}}==
2,747

edits