'''
• IBAN:		GB82 WEST 1234 5698 7654 32	
• Rearrange:		W E S T12345698765432 G B82	
• Convert to integer:		3214282912345698765432161182	
• Compute remainder:		3214282912345698765432161182	mod 97 = 1
'''

import re

COUNTRIES = {'AT': 20, 'BE': 16, 'BG': 22, 'CY': 28, 'CZ': 24, 'FO': 18, 'GL': 18, 'DK': 18, 'EE': 20, 'FI': 18, 'FR': 27, 'DE': 22, 'GI': 23, 'GR': 27, 'HU': 28, 'IS': 26, 'IE': 22, 'IT': 27, 'LV': 21, 'LI': 21, 'LT': 20, 'LU': 20, 'MT': 31, 'MC': 27, 'NL': 18, 'NO': 15, 'PL': 28, 'PT': 25, 'RO': 24, 'SM': 27, 'SK': 24, 'SI': 19, 'ES': 24, 'SE': 24, 'CH': 21, 'GB': 22, 'AL': 28, 'AD': 24, 'AZ': 28, 'BH': 22, 'BA': 20, 'BR': 29, 'CR': 21, 'HR': 21, 'DO': 28, 'GE': 22, 'GT': 28, 'IL': 23, 'JO': 30, 'KZ': 20, 'XK': 20, 'KW': 30, 'LB': 28, 'MK': 19, 'MR': 27, 'MU': 30, 'MD': 24, 'ME': 22, 'PK': 24, 'PS': 29, 'QA': 29, 'LC': 32, 'SA': 24, 'RS': 22, 'TL': 23, 'TN': 24, 'TR': 26, 'AE': 23, 'VG': 24, 'ST': 25, 'AX': 18, 'GF': 27, 'GP': 27, 'MQ': 27, 'RE': 27, 'PF': 27, 'TF': 27, 'YT': 27, 'NC': 27, 'BL': 27, 'MF': 27, 'PM': 27, 'WF': 27, 'EA': 24, 'IM': 22, 'GG': 22, 'JE': 22, 'DZ': 26, 'AO': 25, 'BJ': 28, 'BF': 28, 'BI': 16, 'CM': 27, 'CV': 25, 'CF': 27, 'TD': 27, 'CG': 27, 'DJ': 27, 'EG': 27, 'GQ': 27, 'GA': 27, 'GW': 25, 'IR': 26, 'IQ': 23, 'BY': 28, 'SV': 28, 'HN': 28, 'NI': 32, 'CI': 28, 'MG': 27, 'ML': 28, 'MA': 28, 'MZ': 25, 'NE': 28, 'SN': 28, 'TG': 28, 'UA': 29, 'SC': 27}

def validate_iban(st):
    t = re.sub(r'[\s\-]', '', st.upper())
    l = COUNTRIES[t[:2]]
    if len(t) != l:
        return False
    s = t[4:] + t[:4]
    _s = ''.join(str(ord(c) - 55) if c.isalpha() else c for c in s)
    return int(_s) % 97 == 1


print(validate_iban("MT31 MALT0110 000 000 000 000 00 00123"))
print(validate_iban("AT48-3200-0000-5864-1234"))


    

Embed on website

To embed this program on your website, copy the following code and paste it into your website's HTML: