IBAN: Difference between revisions

m
(Added AppleScript.)
Line 263:
=={{header|Arturo}}==
 
<lang arturorebol>countryIbanSizesibanSize: #{[
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
Line 274:
SK: 24, SI: 19, ES: 24, SE: 24, CH: 21, TN: 24, TR: 26
AE: 23, GB: 22, VG: 24
]
}
 
base36: [(map 0..9 ='x -> toString]to +:string [mapx) 97..122 -> uppercase|char &++ ]
map 97..122 'x -> upper to :string to :char x
 
validIban: @(iban){
valid?: function [iban][
iban: replace iban " " ""
if [not|? contains? iban .regex "/[0-9A-Z]+/"] -> return false
if [not? (size iban]!)=countryIbanSizes.[ibanSize \ slice iban 0 1] -> return false
iban: [(slice iban 4 [(size iban])-1]) ++ [slice iban 0 3]
iban: join [map [charssplit iban] {'ch toString-> to :string [index base36 &]}] ""ch
iban: toNumberto :integer iban
 
return 1=iban%97=1
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" "GB82 TEST 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}}
 
<pre>GB82 WEST 1234 5698 7654 32 => validation:valid? true
GB82 TEST 1234 5698 7654 32 => validation:valid? false</pre>
 
=={{header|AutoHotkey}}==
1,532

edits