IBAN: Difference between revisions

1,689 bytes added ,  7 years ago
Added Elixir
m (→‎{{header|Lua}}: simplify)
(Added Elixir)
Line 126:
GB82 TEST 1234 5698 7654 32 is not valid.
GB82 WEST 1243 5698 7654 32 is not valid.
=={{header|AutoHotkey}}==
{{works with|AutoHotkey 1.1}}
Line 285 ⟶ 286:
invalid IBAN: US12 3456 7890 0987 6543 210 ***error!*** invalid country code: US
invalid IBAN: GR16 0110 1250 0000 0001 2300 695X ***error!*** invalid code length, expected length: 27
=={{header|Bracmat}}==
<lang bracmat>( ( IBAN-check
Line 1,170 ⟶ 1,172:
<pre>GB82 WEST 1234 5698 7654 32 validation is: true
GB82 TEST 1234 5698 7654 32 validation is: false</pre>
 
=={{header|Elixir}}==
{{trans|Ruby}}
<lang elixir>defmodule IBAN do
@len %{ 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 }
def valid?(iban) do
iban = String.replace(iban, ~r/\s/, "")
if Regex.match?(~r/^[\dA-Z]+$/, iban) do
cc = String.slice(iban, 0..1) |> String.to_atom
if String.length(iban) == @len[cc] do
{left, right} = String.split_at(iban, 4)
num = String.codepoints(right <> left)
|> Enum.map_join(fn c -> String.to_integer(c,36) end)
|> String.to_integer
rem(num,97) == 1
else
false
end
else
false
end
end
end
 
[ "GB82 WEST 1234 5698 7654 32",
"gb82 west 1234 5698 7654 32",
"GB82 WEST 1234 5698 7654 320",
"GB82WEST12345698765432",
"GB82 TEST 1234 5698 7654 32",
"ZZ12 3456 7890 1234 5678 12" ]
|> Enum.each(fn iban -> IO.puts "#{IBAN.valid?(iban)}\t#{iban}" end)</lang>
 
{{out}}
<pre>
true GB82 WEST 1234 5698 7654 32
false gb82 west 1234 5698 7654 32
false GB82 WEST 1234 5698 7654 320
true GB82WEST12345698765432
false GB82 TEST 1234 5698 7654 32
false ZZ12 3456 7890 1234 5678 12
</pre>
 
=={{header|F_Sharp|F#}}==
<lang fsharp>open System
Line 1,381 ⟶ 1,433:
SA03 8000 0000 6080 1016 7519 is valid
CH93 0076 2011 6238 5295 7 is valid</pre>
 
 
=={{header|Haskell}}==
Line 1,507 ⟶ 1,558:
GB82 WEST 1234 5698 7654 32
</pre>
 
 
=={{header|Java}}==
Line 1,563 ⟶ 1,613:
SA03 8000 0000 6080 1016 7519 is valid: true
CH93 0076 2011 6238 5295 7 is valid: true
=={{header|JavaScript}}==
<lang JavaScript>var ibanLen = {
Line 1,792 ⟶ 1,843:
yes
</lang>
 
=={{header|Lua}}==
<lang lua>local length=
Line 2,200 ⟶ 2,252:
IBAN[XX0380000000608010167519]=Country XX not has IBAN codes. FALSE
</pre>
 
=={{header|Perl}}==
<lang Perl>#!/usr/bin/perl
Line 2,251 ⟶ 2,304:
GB82 WEST 1234 5698 7654 32 is a valid IBAN number!
GB82TEST12345698765432 is invalid!
=={{header|Perl 6}}==
<lang perl6>subset IBAN of Str where sub ($_ is copy) {
Line 2,274 ⟶ 2,328:
gb82 west 1234 5698 7654 32 is valid.
GB82 TEST 1234 5698 7654 32 is invalid.
 
 
 
=={{header|PHP}}==
Line 2,500 ⟶ 2,552:
IBAN : GR16 0110 1250 0000 0001 2300 695X [INCORRECT: LENGTH]
</pre>
 
=={{header|Python}}==
{{trans|Ruby}}
Line 2,559 ⟶ 2,612:
(valid-iban? "GB82 WEST 1234 5698 7654 32") ; => #t
(valid-iban? "GB82 TEST 1234 5698 7654 32") ; => #f</lang>
 
=={{header|REXX}}==
These REXX programs can validate an IBAN specified on the command line or from an internal list.
Line 2,732 ⟶ 2,786:
p valid_iban? "GB82 WEST 1234 5698 7654 32" #=> true
p valid_iban? "GB82 TEST 1234 5698 7654 32" #=> false</lang>
 
=={{header|Scala}}==
{{libheader|Scala}}<lang Scala>import scala.collection.immutable.SortedMap
Anonymous user