#!/usr/bin/env python # -*- coding: utf-8 -* import sys
_lengths = { 'pl': 28, 'de': 22 } # tu można rozszerzyć o pozostałe kraje
def _norm_char(c): if c.isalpha(): return str(ord(c.lower()) - ord('a') + 10) else: return c
def check_iban(num): if not num.isalnum(): return False, 'Numer może zawierać tylko znaki alfanumeryczne.'
prefix = num[:2].lower() if not prefix.isalpha(): return False, 'Numer nie zaczyna się od kodu kraju.' expected_length = _lengths.get(prefix) l = len(num) # dla nieobsługiwanych krajów nie sprawdzamy długości if (expected_length is not None) and (l != expected_length): return False, 'Nieprawidłowa długość kodu ({} znak{} zamiast {}).'.format(len(num), ('' if l == 1 else 'i' if (1 < l % 10 < 5) and not (10 < l % 100 < 20) else 'ów'), expected_length)
i = int(''.join(_norm_char(j) for j in num[4:] + num[:4])) if i % 97 != 1: return False, 'Nieprawidłowa suma kontrolna.' return True, None
num = sys.argv ok, msg = check_iban(num) if ok: print('Numer {} jest poprawnym numerem IBAN.'.format(num)) else: print('Numer {} jest błędny.