Powershell/Hermes/iban_tool/iban.py

103 lines
3.2 KiB
Python

#!/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()