Jump to content

IBAN: Difference between revisions

2,203 bytes added ,  4 years ago
Added 11l
(Added 11l)
Line 20:
Details of the algorithm can be found on the Wikipedia page.
<br><br>
 
=={{header|11l}}==
{{trans|Python}}
 
<lang 11l>F mod97(numberstring)
V segstart = 0
V step = 9
V prepended = ‘’
V number = 0
L segstart < numberstring.len - step
number = Int(prepended‘’numberstring[segstart .< segstart + step])
V remainder = number % 97
prepended = String(remainder)
I remainder < 10
prepended = ‘0’prepended
segstart += step
step = 7
number = Int(prepended‘’numberstring[segstart ..])
R number % 97
 
V country2length = [‘IS’ = 26, ‘IT’ = 27, ‘MT’ = 31, ‘MU’ = 30, ‘MR’ = 27, ‘MK’ = 19, ‘IE’ = 22, ‘MD’ = 24,
‘ME’ = 22, ‘MC’ = 27, ‘IL’ = 23, ‘DE’ = 22, ‘DO’ = 28, ‘DK’ = 18, ‘PK’ = 24, ‘HR’ = 21,
‘HU’ = 28, ‘FI’ = 18, ‘LU’ = 20, ‘LT’ = 20, ‘LV’ = 21, ‘KW’ = 30, ‘LI’ = 21, ‘PS’ = 29,
‘PT’ = 25, ‘LB’ = 28, ‘GB’ = 22, ‘GE’ = 22, ‘CR’ = 21, ‘TR’ = 26, ‘GI’ = 23, ‘GL’ = 18,
‘CY’ = 28, ‘CZ’ = 24, ‘GR’ = 27, ‘GT’ = 28, ‘KZ’ = 20, ‘TN’ = 24, ‘CH’ = 21, ‘SE’ = 24,
‘SA’ = 24, ‘SM’ = 27, ‘SI’ = 19, ‘SK’ = 24, ‘PL’ = 28, ‘BR’ = 29, ‘FR’ = 27, ‘FO’ = 18,
‘BA’ = 20, ‘BG’ = 22, ‘BE’ = 16, ‘BH’ = 22, ‘VG’ = 24, ‘RO’ = 24, ‘RS’ = 22, ‘NO’ = 15,
‘NL’ = 18, ‘AZ’ = 28, ‘EE’ = 20, ‘AT’ = 20, ‘ES’ = 24, ‘AL’ = 28, ‘AD’ = 24, ‘AE’ = 23]
 
F valid_iban(iban_)
iban = iban_.replace(‘ ’, ‘’).replace("\t", ‘’)
I !re:‘[\dA-Z]+’.match(iban)
R 0B
 
I iban.len != :country2length[iban[0.<2]]
R 0B
 
iban = iban[4..]‘’iban[0.<4]
R mod97(iban.map(ch -> String(Int(ch, 36))).join(‘’)) == 1
 
L(account) [‘GB82 WEST 1234 5698 7654 32’,
‘GB82 TEST 1234 5698 7654 32’]
print(‘#. validation is: #.’.format(account, valid_iban(account)))</lang>
 
{{out}}
<pre>
GB82 WEST 1234 5698 7654 32 validation is: 1B
GB82 TEST 1234 5698 7654 32 validation is: 0B
</pre>
 
=={{header|Ada}}==
1,481

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.