a life less ordinary ?

the egghead diaries

Tag 17997, IBAN-Massaker

27 Kommentare

Zunächst habe ich natürlich geflucht wie ein Rohrspatz. Dann habe ich den Herrn Prellbock von der Bank angerufen, er möge mir bitte die IBANs meiner Konten nennen weil ich sie nirgens finde. Während er murmelt und ich ihn wild in seinen Masken rumclicken höre, finde ich die IBANs bei der Spasskasse durch Zufall selber … sie werden als Tooltip angezeigt, wenn man lange genug mit der Maus auf der Kontonummer verharrt. Sonst nirgendwo. Hätte ich schon wieder eine Bombe in den Laden werfen und den überlebenden Rest der Arschlöcher nach Sibirien verschiffen lassen mögen. Als ich das dem Prellbock erklärt hatte damit auch er endlich weiß wo er IBANs finden kann, wünschten wir uns frohe Weihnachten.

Dann habe ich rausgefunden, dass das ja ganz einfach ist, und mich schlagartig beruhigt. DE?? + BLZ (8-stellig) + Kto (10-stellig, führende Nullen). Das sind immerhin 20 der 22 Stellen die ich sofort weiß. Ries’ng’schicht, fast am Ziel ! Der Rest kann doch nicht so schwer sein ?

Natürlich nicht, denn für die beiden Fragenzeichen muss man nur eine 24-stellige Zahl bilden aus der BLZ, der Kontonummer, hinten noch die in Zahlen umgerechnete Länderkennung und zwei Nullen dranstellen, das modulo 97 nehmen und von 98 abziehen. Total easy !

Und als mathematisches Scharnier ist das eins der einfachsten Dinge, das ich schon morgens auf dem Thron im gekachelten Herrenzimmer spaßeshalber mache, wenn die Zeitung noch nicht da ist, ich noch kräftig drücke, und bereits die Anzahl Atome in einem Muffin im Kopf ausgerechnet habe.

Als ich fünf Pfund leichter und meiner eigenen IBANs bewusst von Thron stieg klingelte das Telefon. Also legte ich die Reichsinsignien Badelatschen und Kaffeebecher an und gewährte gutgelaunt eine Audienz. Jedoch ist scheinbar nicht jeder ein mathematisches Scharnier und die Audienz verlief ein wenig zäh. Zeit also für einen schnellen hack. Läuft ab SQL2000. Liefert die elektronische IBAN und die menschenlesbare dazu.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[IBANDE]') 
  and xtype in (N'FN', N'IF', N'TF'))
  drop function [dbo].[IBANDE]
GO

CREATE FUNCTION IBANDE (
  @nKonto           numeric(35,0)
, @nBLZ             numeric(35,0)
, @szCountryCodeDE  nvarchar(2)
) 
returns @tblIBAN table (
  szIBAN            nvarchar(22)
, szIBANChopped     nvarchar(27)
) as
BEGIN
--  --------------------------------------------------------------------------------
--  IBAN ermitteln
--  ausschliesslich für deutsche Konten 
--
--  Auslaendische Konten erfordern andere Laenderkennungen und können bis zu sieben 
--  zusaetzliche Stellen haben
--
--  Result:
--  IBAN als string
--  IBAN als lesbarer string
--  
--  23.12.13  castagir angelegt
--  --------------------------------------------------------------------------------

  declare @nCountryCodeDE int             ; select @nCountryCodeDE = 0
  declare @nBBAN numeric(35,0)            ; select @nBBAN = 0
  declare @nTemp numeric(35,0)            ; select @nTemp = 0
  declare @nCheckDigits int               ; select @nCheckDigits = 0
  declare @szIBAN nvarchar(22)            ; select @szIBAN = ''

  -- Abfangen zumindest des groebsten Unfugs bei der Eingabe
  if UPPER(@szCountryCodeDE) = 'DE' and @nBLZ > 0 and @nKonto > 0 and len(@nBLZ) = 8 and len(@nKonto) <= 10 
    begin
      -- BBAN: 8-stellige Bankleitzahl plus 10-stellige Kontonummer
      -- Kontonummer ggf. von vorne mit 0 aufgefüllt
      -- --------------------------------------------------------------------------------
      select  @nBBAN = @nBLZ * 10000000000 + @nKonto

      -- numerischer Laendercode: Position des Buchstabens im Alphabet + 9, 
      -- zusammengefasst zu einer Zahl
      -- 'D': Vierter Buchstabe + 9 = 13
      -- 'E': Fünfter Buchstabe + 9 = 14
      -- --------------------------------------------------------------------------------
      select @nCountryCodeDE = 1314

      -- Berechnung der beiden Pruefziffern:
      -- (BBAN + numerischen Laendercode + 00) modulo 97 ermitteln, und von 98 abziehen
        -- --------------------------------------------------------------------------------
      select  @nTemp = (@nBBAN * 10000 + @nCountryCodeDE) * 100
      select  @nCheckDigits = 98 - (@nTemp % 97)

      -- Ausgabe: Laendercode + Pruefziffern (ggf. aufgefuellt mit fuehrender 0) + BBAN
      -- --------------------------------------------------------------------------------
      select @szIBAN = @szCountryCodeDE
                     + replicate('0', 2-len(@nCheckDigits))
                     + convert(nvarchar(2), @nCheckDigits)
                     + convert(nvarchar(18), @nBBAN) 

      insert into @tblIBAN
      select 
        @szIBAN 
      , substring(@szIBAN,  1, 4) + ' ' + substring(@szIBAN,  5, 4) + ' ' 
      + substring(@szIBAN,  9, 4) + ' ' + substring(@szIBAN, 13, 4) + ' ' 
      + substring(@szIBAN, 17, 4) + ' ' + substring(@szIBAN, 21, 4) 
    end

  return
END


select * from dbo.IBANDE(1234567890, 70010000, 'DE')

szIBAN                 szIBANChopped
---------------------- ---------------------------
DE02700100001234567890 DE02 7001 0000 1234 5678 90

Natürlich ist da ein winziger hack drin, der jeden dritten Überweisungsbetrag auf eins meiner Konten auf den Caiman-Inseln umleitet – aber ich muss ja schließlich auch von irgendwas leben.

Und jetzt will ich frühstücken. Viel. Damit ich morgen auf den Thron kann. Um neue IBANs zu berechnen. Im Kopf natürlich – in SQL kann’s ja fast jeder.

27 Kommentare zu “Tag 17997, IBAN-Massaker

  1. Aaaaaah! Bahnhof! Verstehe.

    • Deswegen frühstücke ich so viel … „a beautiful mind“ kann man nur werden, wenn man lange auf dem Thron sitzt und vor Langeweile Kopfrechnen übt 😉

      • Glückwunsch! Ich hab nen furchtbar trägen Stoffwechsel….. Was schreib ich denn da? Löschen! Löschen! Bloß löschen! Jesses….

        • Das hatte ich früher auch … ich war der Einzige im Stundenhotel nee Unfug Studentenwohnheim meine ich, der ein Bücherregal im gekachelten Herrenzimmer hatte. Als ich alle Bücher auswendig konnte habe ich dann angefangen meine Tage mit zwei Vogelbädern Kaffee zu beginnen. Seither kann ich Kopfrechnen, weil ich nix mehr zu lesen habe … und gehe beschwingt in den Tag 😉

  2. Ha… falsche Bank? Bei mir stehen BIC und IBAN auf jedem Kontoauszug.. 🙂 (ist aber sonst die falsche Bank.. man kann eben nicht alles haben!)

  3. Als Sparkassen-Kunde kann ich sagen, dass bei mir die IBAN online irgendwo unter Konto-Übersicht oder so ähnlich angezeigt wird.

    Als SEPA Umstellungsbeauftragter meines Unternehmens muss ich sagen, dass die Annahme, dass IMMER mit Nullen VORNE aufgefüllt wird, leider nicht ganz korrekt ist. Da ich eigentlich der gleichen Meinung war, bin ich über einige dieser Fälle gestolpert. Ich habe im Zuge der Umstellung / Überprüfung etliche Fälle gesehen, wo aus einer kurzen Konto-Nr. (sechsstellig o.ä.) eine IBAN AlteKontoNr + 0000 wurde. Keine Ahnung, warum! Aber es gibt da wohl etliche Ausnahmen, die eine einfache kalkulatorische Umstellung der Daten nicht unbedingt ratsam erscheinen lassen

    In der Praxis aktuell zeigt sich, dass viele Inhaber von ehemals kurzen Konto-Nummern bei der IBAN Probleme haben. Uns sind jetzt schon mehrmals Rechnungen untergekommen, die mit weniger als 22 Stellen bei der IBAN (fehlende Nullen) unterwegs sind. Da wir unsere Daten beim Bankenverlag konvertiert haben, kann uns das aber nicht aber schrecken.

    • Pscht … Mensch, das war doch genau der Punkt mit den Caiman-Inseln ! Versau mir das nicht 😉

      Es würde mich sehr wundern wenn das unfallfrei für alle klappen sollte … in meinen ersten Versuchen vor einigen Monaten habe ich für eine sechsstellige Kontonummer die ich seit den Kartoffelkriegen habe, von zwei „offiziellen“ Seiten noch unterschiedliche IBANs errechnet bekommen – und sehr gelacht. Die einen hatten die 0en hinten dran geklatscht, die anderen davor, genau wie Du es beschreibst.

      Ich glaub die Kasper blickten damals selber nicht mehr durch wie ihr Kunstwerk genau aussehen soll – ob’s inzwischen klar ist kann man nur hoffen. Ich lasse doch gerne ständig neue Briefköpfe drucken …

      Ich habe aber im Lauf des Tages ein Rudel eigener bzw. mir bekannter Sätze durchlaufen lassen … zumindest für die stimmen die errechneten Ergebnisse mit dem überein, was die jeweiligen Bankseiten respektive Briefköpfe mir sagen: CoBa, DAB, SPK, 1822, DB und Postbank waren dabei.

  4. *hust*

    Das hätt ich gern für mein unerstezbares System in COBOL – ersatzweis ginge auch LISP oder FORTH bzw. FORTRAN *duck*

    Ist wohl gut, daß für Schneebälle passender Größe grad das Material etwas lieferengpässig zu sein schein?

    • COBOL … damit hat Kolumbus doch damals seine Reiseroute programmiert, oder ?

      Aber LISP wäre u.U. sogar noch machbar … wenn ich einen joint rauche und dazu eine Pulle Domestos auf ex trinke, damit mir die merkwürdige Syntax wieder einfällt 😉

      • Nein, tu es nicht! Jedenfalls nicht das Domestix auf ex …

        (Ich hab die alle vier mal gelernt – und glücklicherweise alle vier bereits vergessen, bis auf die Namen)

        • Wir wurden an der Uni mit den angeblich so viel tolleren Werkzeugen PASCAL und MODULA gefoltert … und der eine Kasper dort hielt LISP für das Mass aller Dinge. Vermutlich weil er es buchstabieren konnte.

          Morgens durfte ich also in einem akademischen Misthaufen wühlen, um mich ab Mittag dann in der freien Wildbahn mit ernstzunehmenden Dingen zu befassen … um auch weiter jeden Morgen „Zurück in die Jauchegrube“ spielen zu können.

  5. 😉 – das ‚gekachelte H.-Zimmer‘, hmmm, ja, seeehr gutes Arbeitszimmer!
    Wie sagte mein Vater immer so schoen: „wenn Du etwas Unliebsames zu ueberleben/durchstehen/abzuwarten hast und wenigstens den Zeitpunkt von dessen Ende schon kennst, wirst Du die unliebsame Sit. dazwischen notfalls auf dem Kloo sitzend ueberleben; beiss gefaelligst die Zaehne zusammen, Diandl !“
    Ich hielt mich in meinem Leben relativ gut daran – ausser EINmal. Diese Verweigerung war’s aber ganz doll wert!

    Ansonsten; die technische Problematik zur Angelegenheit dieses Posts: auch Bahnhof, aeh, Gaertner – na ja, Du weisst schon, oder? 😉

  6. Ah… sehr schön! Bei mir erledigt das Starmoney! Da ist so ein Umrechner gleich in der SEPA-Überweisungsoberfläche eingebaut… Falls man den ganzen kram nicht zur Hand hat… Und entweder unser Krankenhaus bekommt nun die Zuzahlung oder eben nicht… mal schauen… 😉

    Wünsche frohe Weihnachten!!! 😀

  7. stehn die nummern nicht auf euren bankkarten? wer das erfunden hat …… tsss – ich wünsch dir frohe festtage!

    • Auf den neuen werden sie vermutlich stehen … vorher nur, wenn man sie mit nem Edding drauf pinselt.

      Nachdem unsere Bankkarten einige Jahre gültig sind werde ich das aber erst Ende 2015 wissen.

      Dir auch frohes Fest !

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google Foto

Du kommentierst mit Deinem Google-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

Verbinde mit %s