IBAN: Difference between revisions

Content added Content deleted
(Added AppleScript.)
Line 263: Line 263:
=={{header|Arturo}}==
=={{header|Arturo}}==


<lang arturo>countryIbanSizes: #{
<lang rebol>ibanSize: #[
AL: 28, AD: 24, AT: 20, AZ: 28, BE: 16
AL: 28, AD: 24, AT: 20, AZ: 28, BE: 16
BH: 22, BA: 20, BR: 29, BG: 22, CR: 21, HR: 21, CY: 28
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
CZ: 24, DK: 18, DO: 28, EE: 20, FO: 18, FI: 18, FR: 27
Line 274: Line 274:
SK: 24, SI: 19, ES: 24, SE: 24, CH: 21, TN: 24, TR: 26
SK: 24, SI: 19, ES: 24, SE: 24, CH: 21, TN: 24, TR: 26
AE: 23, GB: 22, VG: 24
AE: 23, GB: 22, VG: 24
]
}

base36: [map 0..9 => toString] + [map 97..122 -> uppercase|char & ]
base36: (map 0..9 'x -> to :string x) ++
map 97..122 'x -> upper to :string to :char x

validIban: @(iban){
valid?: function [iban][
iban: replace iban " " ""
iban: replace iban " " ""
if not? contains? iban .regex "[0-9A-Z]+" -> return false
if not? (size iban)=ibanSize \ slice iban 0 1 -> return false
iban: (slice iban 4 (size iban)-1) ++ slice iban 0 3
iban: join map split iban 'ch -> to :string index base36 ch
iban: to :integer iban


return 1=iban%97
if [not|contains iban "/[0-9A-Z]+/"] -> return false
]
if [size iban]!=countryIbanSizes.[slice iban 0 1] -> return false

loop ["GB82 WEST 1234 5698 7654 32"
iban: [slice iban 4 [size iban]-1] + [slice iban 0 3]
"GB82 TEST 1234 5698 7654 32"] 'ib
iban: join [map [chars iban] { toString [index base36 &]}] ""
-> print [ib "=> valid?" valid? ib]</lang>
iban: toNumber iban
return iban%97=1
}

loop #("GB82 WEST 1234 5698 7654 32" "GB82 TEST 1234 5698 7654 32") {
print & + " => validation: " + [validIban &]
}</lang>


{{out}}
{{out}}


<pre>GB82 WEST 1234 5698 7654 32 => validation: true
<pre>GB82 WEST 1234 5698 7654 32 => valid? true
GB82 TEST 1234 5698 7654 32 => validation: false</pre>
GB82 TEST 1234 5698 7654 32 => valid? false</pre>


=={{header|AutoHotkey}}==
=={{header|AutoHotkey}}==