diff --git a/Hermes/iban_tool/iban.py b/Hermes/iban_tool/iban.py new file mode 100644 index 0000000..d3cbdfe --- /dev/null +++ b/Hermes/iban_tool/iban.py @@ -0,0 +1,102 @@ +#!/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() diff --git a/Hermes/iban_tool/iban_tool_windows.zip b/Hermes/iban_tool/iban_tool_windows.zip index 19f8353..b920534 100644 Binary files a/Hermes/iban_tool/iban_tool_windows.zip and b/Hermes/iban_tool/iban_tool_windows.zip differ