Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
28
Task/IBAN/Python/iban.py
Normal file
28
Task/IBAN/Python/iban.py
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
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)))
|
||||
Loading…
Add table
Add a link
Reference in a new issue