How to resolve the algorithm IBAN step by step in the Python programming language
How to resolve the algorithm IBAN step by step in the Python programming language
Table of Contents
Problem Statement
The International Bank Account Number (IBAN) is an internationally agreed means of identifying bank accounts across national borders with a reduced risk of propagating transcription errors. The IBAN consists of up to 34 alphanumeric characters:
The check digits enable a sanity check of the bank account number to confirm its integrity even before submitting a transaction.
Validate the following fictitious IBAN: GB82 WEST 1234 5698 7654 32
Details of the algorithm can be found on the Wikipedia page.
Let's start with the solution:
Step by Step solution about How to resolve the algorithm IBAN step by step in the Python programming language
This piece of code provides a function to validate an IBAN (International Bank Account Number). It's a string made up of alphanumeric characters, typically used for international money transfers. The function checks the length and structure of the IBAN against a dictionary of expected lengths for different country codes.
It follows these steps to check if the IBAN is valid:
-
Removes any spaces or tabs from the input string.
-
Verifies that the string contains only alphanumeric characters (ie.
[A-Z0-9]
) -
Checks if the length of the string matches the expected length for the country code specified in the first two characters of the IBAN using a dictionary
_country2length
. -
Shifts the string by four characters and concatenates the first four characters to the end of the string.
-
Converts each character in the string to a base-36 integer (0-35), representing digits 0-9 and letters A-Z.
-
Performs a modulo 97 operation on the resulting integer, checking if the remainder is equal to 1.
If all these conditions are met, the IBAN is considered valid, and the function returns True; otherwise, it returns False.
In the main function, two sample IBANs are provided for testing:
-
GB82 WEST 1234 5698 7654 32
is an actual valid IBAN for a UK bank account. -
GB82 TEST 1234 5698 7654 32
is an invalid IBAN as it does not match the correct format for a UK IBAN.
When you run the code, it will output the validation results for each of the sample IBANs, indicating whether they are valid or not.
Source code in the python programming language
import re
_country2length = dict(
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, GE=22, DE=22, GI=23, GR=27, GL=18,
GT=28, HU=28, IS=26, IE=22, IL=23, IT=27, KZ=20, KW=30,
LV=21, LB=28, LI=21, LT=20, LU=20, MK=19, MT=31, MR=27,
MU=30, MC=27, MD=24, ME=22, NL=18, NO=15, PK=24, PS=29,
PL=28, PT=25, RO=24, SM=27, SA=24, RS=22, SK=24, SI=19,
ES=24, SE=24, CH=21, TN=24, TR=26, AE=23, GB=22, VG=24 )
def valid_iban(iban):
# Ensure upper alphanumeric input.
iban = iban.replace(' ','').replace('\t','')
if not re.match(r'^[\dA-Z]+$', iban):
return False
# Validate country code against expected length.
if len(iban) != _country2length[iban[:2]]:
return False
# Shift and convert.
iban = iban[4:] + iban[:4]
digits = int(''.join(str(int(ch, 36)) for ch in iban)) #BASE 36: 0..9,A..Z -> 0..35
return digits % 97 == 1
if __name__ == '__main__':
for account in ["GB82 WEST 1234 5698 7654 32", "GB82 TEST 1234 5698 7654 32"]:
print('%s validation is: %s' % (account, valid_iban(account)))
You may also check:How to resolve the algorithm Soundex step by step in the Elixir programming language
You may also check:How to resolve the algorithm Least common multiple step by step in the Nanoquery programming language
You may also check:How to resolve the algorithm Topic variable step by step in the Ruby programming language
You may also check:How to resolve the algorithm Caesar cipher step by step in the Icon and Unicon programming language
You may also check:How to resolve the algorithm Reflection/List properties step by step in the Java programming language