From be4ca228cbdebc2b4482d25ff5d6888a64349d63 Mon Sep 17 00:00:00 2001 From: buiaca Date: Wed, 12 Aug 2026 11:13:54 +0200 Subject: [PATCH] Fix: console window closes immediately on Windows (adds input() pause) --- Hermes/iban_tool/iban.py | 102 +++++++++++++++++++++++++ Hermes/iban_tool/iban_tool_windows.zip | Bin 1762 -> 1708 bytes 2 files changed, 102 insertions(+) create mode 100644 Hermes/iban_tool/iban.py 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 19f8353169ce6e77dd2b5aca6237c577d3934b12..b920534e2068c7d1b861adf0d60133bd467f4d73 100644 GIT binary patch delta 1658 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