IBAN: Difference between revisions
Content added Content deleted
(→{{header|Ruby}}: Add Python.) |
Thundergnat (talk | contribs) (→{{header|Perl 6}}: Added a Perl 6 entry) |
||
Line 221: | Line 221: | ||
USER></pre> |
USER></pre> |
||
=={{header|Perl 6}}== |
|||
<lang perl6>for ( |
|||
'GB82 WEST 1234 5698 7654 32', |
|||
'gb82 west 1234 5698 7654 32', |
|||
'GB82 TEST 1234 5698 7654 32' |
|||
) { |
|||
printf "%s is %svalid.\n", $_, is_valid_iban($_) ?? '' !! 'NOT ' |
|||
} |
|||
sub is_valid_iban (Str $iban is copy) { |
|||
my %len = < |
|||
AD 24 AE 23 AL 28 AT 20 AZ 28 BA 20 BE 16 BG 22 BH 22 BR 29 CH 21 |
|||
CR 21 CY 28 CZ 24 DE 22 DK 18 DO 28 EE 20 ES 24 FI 18 FO 18 FR 27 |
|||
GB 22 GE 22 GI 23 GL 18 GR 27 GT 28 HR 21 HU 28 IE 22 IL 23 IS 26 |
|||
IT 27 KW 30 KZ 20 LB 28 LI 21 LT 20 LU 20 LV 21 MC 27 MD 24 ME 22 |
|||
MK 19 MR 27 MT 31 MU 30 NL 18 NO 15 PK 24 PL 28 PS 29 PT 25 RO 24 |
|||
RS 22 SA 24 SE 24 SI 19 SK 24 SM 27 TN 24 TR 26 VG 24 |
|||
>; |
|||
$iban ~~ s:g/\s//; |
|||
return 0 if $iban ~~ m/<-[0..9A..Za..z]>/; |
|||
my $country = $iban.uc.substr(0,2); |
|||
return 0 unless %len.exists($country) and $iban.chars == %len{$country}; |
|||
$iban ~~ s/(.**4)(.+)/$1$0/; |
|||
$iban.subst(:g, /(\D)/, -> $/ {:36("$0")}) % 97 == 1; |
|||
}</lang> |
|||
<pre> |
|||
GB82 WEST 1234 5698 7654 32 is valid. |
|||
gb82 west 1234 5698 7654 32 is valid. |
|||
GB82 TEST 1234 5698 7654 32 is NOT valid. |
|||
</pre> |
|||
=={{header|Python}}== |
=={{header|Python}}== |