#!/usr/bin/env python3 """ iban.py - Generiert deutsche IBAN und BIC aus Kontonummer und Bankleitzahl. Nutzung: venv/bin/python iban.py --konto 123456789 --blz 10020520 venv/bin/python iban.py --konto 123456789 --blz 10020520 --json venv/bin/python iban.py # startet interaktiven Eingabemodus """ import argparse import json import sys from schwifty import IBAN, BIC from schwifty.exceptions import InvalidBankCode def generate_iban(kontonummer: str, bankleitzahl: str) -> dict: """Erzeugt IBAN und versucht BIC. Gibt ein Dictionary mit Ergebnissen zurueck.""" try: bankleitzahl = str(int(bankleitzahl)) # fuehrende Nullen entfernen except ValueError: pass iban_obj = IBAN.generate("DE", bank_code=bankleitzahl, account_code=kontonummer) result = { "iban": iban_obj.formatted, "iban_raw": str(iban_obj), "bic": None, "bank_name": None, "bank_short_name": None, "bankleitzahl": bankleitzahl, "kontonummer": kontonummer, "laendercode": "DE", "valid": True, "error": None, } try: bic_obj = BIC.from_bank_code("DE", bankleitzahl) result["bic"] = str(bic_obj) if bic_obj.bank_names: result["bank_name"] = bic_obj.bank_names[0] if bic_obj.bank_short_names: result["bank_short_name"] = bic_obj.bank_short_names[0] except InvalidBankCode: result["error"] = f"BIC fuer Bankleitzahl {bankleitzahl} nicht gefunden." return result def main(): parser = argparse.ArgumentParser( description="Generiert deutsche IBAN aus Kontonummer und Bankleitzahl." ) parser.add_argument( "--konto", "--kontonummer", dest="konto", type=str, help="Deutsche Kontonummer (mit oder ohne fuehrende Nullen)" ) parser.add_argument( "--blz", "--bankleitzahl", dest="blz", type=str, help="Bankleitzahl (BLZ)" ) parser.add_argument( "--json", dest="as_json", action="store_true", help="Ergebnis als JSON ausgeben" ) args = parser.parse_args() # Interaktiver Modus, wenn keine Argumente uebergeben wurden if not args.konto or not args.blz: if args.konto or args.blz: print("Fehler: Bitte beide Werte (Kontonummer und Bankleitzahl) angeben.", file=sys.stderr) sys.exit(1) print("=== IBAN Generator ===") kontonummer = input("Kontonummer: ").strip() bankleitzahl = input("Bankleitzahl (BLZ): ").strip() print("======================") else: kontonummer = args.konto bankleitzahl = args.blz result = generate_iban(kontonummer, bankleitzahl) if args.as_json: print(json.dumps(result, ensure_ascii=False, indent=2)) else: print(f"IBAN: {result['iban']}") print(f"BIC: {result['bic'] or '(nicht gefunden)'}") print(f"Bank: {result['bank_name'] or '(unbekannt)'}") if result['error']: print(f"Hinweis: {result['error']}") # Verhindert, dass das Konsolenfenster unter Windows sofort geschlossen wird try: input("\n[Enter] zum Schließen...") except EOFError: pass if __name__ == "__main__": main()