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_) V 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, radix' 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)))