Vielleicht muss ja noch jemand vor der offiziellen SEPA-Pflicht im Februar 2014 noch schnell ein paar Kontodaten in seinem Bestand konvertieren. Falls diese Daten zufällig im SQL-Server liegen, dessen Express-Version ja auch gratis verfügbar ist, so kann er dafür die unten stehen Funktion nutzen. Hintergründe zur Berechnung der IBAN-Prüfziffer finden sich hier oder auch bei Wikipedia. Möchte man neben der IBAN auch den BIC in einem Massen-Update bestimmen, so helfen die Daten der Bundesbank. Bei letzterer lassen sich die Rohdaten der Bankleitzahlen zu allen Banken in Deutschland herunterladen, darin ist auch der Bank Identifiier Code (BIC) enthalten. Damit hat man alle Bausteine zusammen, um per SQL einen größeren Bestand an Bankverbindungen in seiner Datenbank zu aktualisieren. Für die Validierung von IBAN-Eingaben in Office-Produkten, z.B. Access, gibt es auch schon eine schöne VBA-Funktion im Blog von Aswin van Woudenberg.
T-SQL-Funktion zum Berechnen einer deutschen IBAN (International Bank Account Number) aus (alter) Kontonummer und BLZ (Bankleitzahl):
-- =========================================================
-- Author: Dr. Markus Kersting
-- Create date: 01.11.2013
-- Description: Berechnet die IBAN für deutsche Bankkonten
-- License: Free for all, No Warranty
-- =========================================================
CREATE FUNCTION CalculateIBAN
(
@actnr nvarchar(20), -- Alte Kontonummer, 10 Stellen
@blz nvarchar(20) -- Banklleitzahl, 8 Stellen
)
RETURNS varchar(22) -- Deutsche IBANs sind immer 22-stellig
AS
BEGIN
DECLARE
@countrycode nvarchar(2) = 'DE', -- Ländercode, immer DE
@bban nvarchar(30), -- neue Banknummer
@ban nvarchar(30), -- neue Kontonummer
@iban nvarchar(22), -- die Ausgabe-IBAN, In Deutschland immer 22 Stellen
@inum numeric(35,0), -- Konstruierte Nummer für Berechnung der Prüfziffer
@chk numeric(2,0), -- 2-Stellige Prüfziffer
@calcstring nvarchar(50);
set @iban=null;
-- Teile zusammenbauen, ggfs. Leerzeichen entfernen
set @bban=right('00000000'+replace(@blz,' ',''),8); -- 8-Stellige BLZ
set @ban=right('0000000000'+replace(@actnr,' ',''),10); --10-Stellige Kontonummer
-- Berechnung nur durchführen, wenn Kontonummer und BLZ vorhanden und nicht NULL
if (isnumeric(@bban)=1) and (isnumeric(@ban)=1)
begin
-- Nummer für Prüfsummenbrechneng erstellen
-- Ländercode DE + 00 rechts. DE in Zahl umwandeln, 13=D, 14=E
set @calcstring=@bban+@ban+'131400';
-- Prüfziffer
set @inum=@calcstring;
set @chk=98-(@inum % 97);
-- IBAN zusammensetzen
set @iban=@countrycode+right('0'+cast(@chk as nvarchar),2)+@bban+@ban
end
-- Ausgabe
return @iban;
END
GO