IBAN: Difference between revisions

2,237 bytes added ,  6 days ago
Added Easylang
m (→‎{{header|Wren}}: Minor tidy)
(Added Easylang)
 
Line 1,610:
US12 3456 7890 0987 6543 210 is not valid
GR16 0110 1250 0000 0001 2300 695X is not valid</pre>
 
=={{header|EasyLang}}==
<syntaxhighlight>
cc$[] = [ "AD" "AE" "AL" "AO" "AT" "AZ" "BA" "BE" "BF" "BG" "BH" "BI" "BJ" "BR" "CG" "CH" "CI" "CM" "CR" "CV" "CY" "CZ" "DE" "DK" "DO" "DZ" "EE" "EG" "ES" "FI" "FO" "FR" "GA" "GB" "GE" "GI" "GL" "GR" "GT" "HR" "HU" "IE" "IL" "IR" "IS" "IT" "JO" "KW" "KZ" "LB" "LI" "LT" "LU" "LV" "MC" "MD" "ME" "MG" "MK" "ML" "MR" "MT" "MU" "MZ" "NL" "NO" "PK" "PL" "PS" "PT" "QA" "RO" "RS" "SA" "SE" "SI" "SK" "SM" "SN" "TN" "TR" "UA" "VG" ]
ln[] = [ 24 23 28 25 20 28 20 16 27 22 22 16 28 29 27 21 28 27 21 25 28 24 22 18 28 24 20 27 24 18 18 27 27 22 22 23 18 27 28 21 28 22 23 26 26 27 30 30 20 28 21 20 20 21 27 24 22 27 19 28 27 31 30 25 18 15 24 28 29 25 29 24 22 24 24 19 24 27 28 24 26 29 24 ]
#
func validcc iban$ .
c$ = substr iban$ 1 2
for i to len cc$[]
if c$ = cc$[i]
return if len iban$ = ln[i]
.
.
return 0
.
func mod97 s$ .
while s$ <> ""
h$ = r div 10
h$ &= r mod 10
h$ &= substr s$ 1 13
s$ = substr s$ 14 9999
r = number h$ mod 97
.
return r
.
func isvalid hiban$ .
for c$ in strchars hiban$
c = strcode c$
if c > 32
if c >= 97 and c < 122
c -= 32
c$ = strchar c
elif c < 48 or c > 57 and c < 65 or c > 90
return 0
.
miban$ &= c$
.
.
if validcc miban$ = 0
return 0
.
for c$ in strchars substr miban$ 5 999 & substr miban$ 1 4
c = strcode c$
if c >= 65 and c <= 90
t$ &= (c - 55) div 10
t$ &= (c - 55) mod 10
else
t$ &= c$
.
.
return if mod97 t$ = 1
.
proc check s$ . .
write s$ & " is "
if isvalid s$ = 1
print "valid"
else
print "not valid"
.
.
check "GB82 WEST 1234 5698 7654 32"
check "GB82WEST12345698765432"
check "gb82 west 1234 5698 7654 32"
check "GB82 TEST 1234 5698 7654 32"
check "GB82 WEST 1243 5698 7654 32"
check "GB82 west 1243 5698 7654 32"
</syntaxhighlight>
{{out}}
<pre>
GB82 WEST 1234 5698 7654 32 is valid
GB82WEST12345698765432 is valid
gb82 west 1234 5698 7654 32 is valid
GB82 TEST 1234 5698 7654 32 is not valid
GB82 WEST 1243 5698 7654 32 is not valid
GB82 west 1243 5698 7654 32 is not valid
</pre>
 
=={{header|Elixir}}==
2,083

edits