Kapitel 3. Verwendung

3.1. Lizenz aktivieren

Mit der Bestellung von libsepa erhalten Sie einen Lizenzcode, der auf Ihren Namen ausgestellt ist. Um die Einschränkungen der Demoversion aufzuheben, rufen Sie nach dem Start Ihres Programmes immer die Funktion SEPA::init() wie folgt auf:

bool SEPA::init(int $option, string $value);

// PHP / Perl
SEPA::init(SEPA_INIT_LICUSER, "Ihr Benutzername");   # lizenzierter Benutzername
SEPA::init(SEPA_INIT_LICCODE, "XXXXX-XXXXX-XXXXX");  # Lizenzcode

# Perl
SEPA::init(SEPA_INIT_LICUSER, "Ihr Benutzername");   # lizenzierter Benutzername
SEPA::init(SEPA_INIT_LICCODE, "XXXXX-XXXXX-XXXXX");  # Lizenzcode

// Java
import com.libsepa.*;
SEPA.init(SEPA_INIT_LICUSER, "Ihr Benutzername");    // lizenzierter Benutzername
SEPA.init(SEPA_INIT_LICCODE, "XXXXX-XXXXX-XXXXX");   // Lizenzcode

Ohne Lizenz erlaubt libsepa lediglich bis zu drei Lastschriften oder Überweisungen in einer Datei.

3.2. IBAN/BIC-Konvertierung

libsepa kann die IBAN und BIC für gültige deutsche Bankverbindungen berechnen (siehe Hintergrund zur IBAN-Konvertierung).

3.2.1. IBAN-Konvertierung

Während der IBAN-Konvertierung prüft libsepa, ob die verwendete Bankleitzahl und Kontonummer korrekt ist. Es kann also nicht jede beliebige Zahlenkombination in eine IBAN konvertiert werden.

string SEPA::IBAN_convert(string $country, string $account, string $bank_id [, int &$status ] );

// PHP
$iban = SEPA::IBAN_convert("DE", "4020000002", "30120764");
$iban = SEPA::IBAN_convert("DE", "4020000002", "30120764", $status);

# Perl
my $iban = SEPA::IBAN_convert("DE", "4020000002", "30120764");
my $iban = SEPA::IBAN_convert("DE", "4020000002", "30120764", \$status);

// Java
String iban = SEPA.IBAN_convert("DE", "4020000002", "30120764");

Nur PHP/Perl/C: über den optionalen Parameter status (eine Referenz auf eine Integer-Variable) kann zudem der Konvertierungsstatus zurückgegeben werden. Die Codes sind analog zum sogenannten IBAN-hin/IBAN-rück-Verfahren:

Code Bedeutung
00 Konvertierung war erfolgreich (wenn IBAN zurückgeliefert wird)
01 Konvertierung war erfolgreich, die Kontonummer wurde dabei ersetzt (z.B. Spendenkonto oder fehlende Unterkontonummer)
10 Bankleitzahl ungültig
11 Kontonummer ungültig (z.B. Prüfziffernfehler)
12 Bankleitzahl ist nicht für IBAN-Konvertierung freigegeben
13 Bankleitzahl ist zur Löschung vorgemerkt und wurde durch die Nachfolge-BLZ ersetzt
14 Bankleitzahl ist zur Löschung vorgemerkt. Es liegt keine Nachfolge-Bankleitzahl vor.
15 Für die Konvertierung wurde eine Nachfolge-Bankleitzahl verwendet.
50 Für diese Bankleitzahl kann keine IBAN ermittelt werden. Bitte fragen Sie bei der kontoführenden Stelle nach.

3.2.2. BIC aus IBAN berechnen

Für Bankverbindungen in Deutschland, Österreich, Schweiz und Liechtenstein (IBAN-Prefix DE, AT, CH und LI) kann anhand der IBAN die dazugehörige BIC berechnet werden:

string SEPA::IBAN_getBIC(string $iban);

// PHP
$bic = SEPA::IBAN_getBIC("DE12987654320012345678");

# Perl
my $bic = SEPA::IBAN_getBIC("DE12987654320012345678");

// Java
String bic = SEPA.IBAN_getBIC("DE12987654320012345678");

Bitte beachten Sie, dass für Österreich, Schweiz und Liechtenstein keine Korrektheit der errechneten BIC garantiert werden kann, da libsepa lediglich anhand der frei verfügbaren BLZ-Tabellen die dazugehörige BIC heraussuchen kann. Eine garantiert richtige BIC erhalten Sie im Rahmen des offiziellen Konvertierungsprozesses über den IBANService (Österreich) bzw. das IBAN-Tool (Schweiz).

Eine weitere Besonderheit ist, dass die BIC nicht zwangsläufig den selben Ländercode tragen muss wie die IBAN. Beispiel:

IBAN BIC Bemerkung
CH50 8921 4123 4567 890A B SKLODE66XXX Die Sparkasse Lörrach nimmt auch am schweizer Zahlungssystem teil

3.3. IBAN/BIC-Validierung

3.3.1. IBAN-Validierung

Zur Prüfung der Gültigkeit einer IBAN verwenden Sie die Funktion IBAN_check():

bool SEPA::IBAN_check(string $iban);

// PHP
$valid = SEPA::IBAN_check("DE87200500001234567890");

# Perl
my $valid = SEPA::IBAN_check("DE87200500001234567890");

// Java
boolean valid = SEPA.IBAN_check("DE87200500001234567890");

Bitte beachten Sie folgende wichtige Einschränkungen bei der IBAN-Validierung:

  • die formale Korrektheit der IBAN wird für alle 33 SEPA-Teilnehmerländer korrekt überprüft (Länge und zulässige Zeichen der IBAN sowie Korrektheit der Prüfziffern)

  • für IBANs aus Deutschland, Österreich, Schweiz und Liechtenstein wird zudem die enthaltene Bankleitzahl (DE/AT) bzw. BC-Nummer (CH/LI) geprüft

  • für IBANs aus Deutschland wird zudem eine eventuell enthaltene Kontonummer-Prüfziffer geprüft

  • nicht geprüft werden kann, ob das angegebene Konto tatsächlich existiert

3.3.2. BIC-Validierung

Da BICs keine Prüfziffern beinhalten, ist eine Gültigkeitsprüfung nicht zuverlässig möglich. Für deutsche IBANs können Sie einfach mittels IBAN_getBIC() den zugehörigen BIC berrechnen.

Außerdem können Sie mittels der BIC_*()-Funktionen den BIC im SCL-Verzeichnis der Deutschen Bundesbank suchen. Dieses Verzeichnis enthält derzeit über 48.000 BICs aus allen SEPA-Teilnehmerländern, welche über den SEPA-Clearer der Deutschen Bundesbank erreichbar sind. Diese Liste stellt allerdings nur eine unverbindliche Auskunft über die Erreichbarkeit eines BIC dar. Neben dem Namen der Bank gibt dieses Verzeichnis auch Auskunft über die unterstützten Dienste eines Zahlungsdienstleisters, also z.B. ob bei dem betroffenen Institut etwa Lastschriften möglich sind:

string SEPA::BIC_getBankName(string $bic);
int SEPA::BIC_getBankFlags(string $bic);
Flags:
SEPA_SCL_SCT - normale Überweisungen (Cash Transfer)
SEPA_SCL_SDD - SEPA-Basislastschriften (Direct Debit)
SEPA_SCL_COR1 - Basislastschriften mit 1 Tag Vorlaufzeit (COR1)
SEPA_SCL_B2B - SEPA-Firmenlastschriften

// PHP
$name = SEPA::BIC_getBankName("BYLADEM1ERH");
if ($name != NULL) {
  $flags = SEPA::BIC_getBankFlags("BYLADEM1ERH");
  if ($flags & SEPA_SCL_SDD) { ... }
}

# Perl
my $name = SEPA::BIC_getBankName("BYLADEM1ERH");
if (defined($name)) {
  my $flags = SEPA::BIC_getBankFlags("BYLADEM1ERH");
  if ($flags & SEPA_SCL_SDD) { ... }
}

// Java
String name = SEPA.BIC_getBankName("BYLADEM1ERH");
if (name != null) {
  int flags = SEPA.BIC_getBankFlags("BYLADEM1ERH");
  if (flags & SEPA.SEPA_SCL_SDD) { ... }
}

Liefert ein gesuchter BIC keinen Treffer, ersetzen Sie die letzten drei Stellen am besten durch XXX und führen die Suche dann erneut durch. Einige Banken haben lediglich den Haupt-BIC registriert, ihren Kunden aber Filial-BICs genannt.

Tipp: prüfen Sie immer ob ein angegebener BIC im SCL enthalten ist. Falls ja, prüfen Sie zusätzlich ob dieser auch den von Ihnen gewünschten Service unterstützt (z.B. Überweisungen oder Lastschriften). Ist der gewünschte Dienst laut SCL nicht verfügbar, oder wurde der BIC dort gar nicht gefunden, halten Sie unbedingt Rücksprache mit dem betroffenen Zahlungspartner.

3.4. Lastschriften erzeugen

Erzeugen Sie ein SEPA-Objekt mit dem Nachrichtentyp SEPA_MSGTYPE_DDI:

SEPA SEPA(int $msgtype);

// PHP
$sepa = new SEPA(SEPA_MSGTYPE_DDI);

# Perl
my $sepa = new SEPA(SEPA_MSGTYPE_DDI);

// Java
SEPA sepa = new SEPA(SEPA.SEPA_MSGTYPE_DDI);

Diesem Objekt fügen Sie dann der Reihe nach den Namen des Zahlungsempfängers (setName()), dessen Gläubiger-ID (setCreditorIdentifier()), IBAN (setIBAN()) und BIC (setBIC()) hinzu:

bool $sepa->setName(string $name);
bool $sepa->setCreditorIdentifier(string $ci);
bool $sepa->setIBAN(string $iban);
bool $sepa->setBIC(string $bic);

// PHP
$sepa->setIBAN("DE87200500001234567890");            // IBAN des Zahlungsempfängers
$sepa->setBIC("BANKDEFFXXX");                        // BIC des Zahlungsempfängers
$sepa->setName("Mustermann u. Co. KG");              // Name des Zahlungsempfängers
$sepa->setCreditorIdentifier("DE20ZZZ00987654321");  // Gläubiger-Identifikationsnummer

# Perl
$sepa->setIBAN("DE87200500001234567890");            # IBAN des Zahlungsempfängers
$sepa->setBIC("BANKDEFFXXX");                        # BIC des Zahlungsempfängers
$sepa->setName("Mustermann u. Co. KG");              # Name des Zahlungsempfängers
$sepa->setCreditorIdentifier("DE20ZZZ00987654321");  # Gläubiger-Identifikationsnummer

// Java
sepa.setIBAN("DE87200500001234567890");              // IBAN des Zahlungsempfängers
sepa.setBIC("BANKDEFFXXX");                          // BIC des Zahlungsempfängers
sepa.setName("Mustermann u. Co. KG");                // Name des Zahlungsempfängers
sepa.setCreditorIdentifier("DE20ZZZ00987654321");    // Gläubiger-Identifikationsnummer

Optional können Sie das Einzugsdatum festlegen (Format: yyyy-mm-dd). Wird kein Datum gesetzt, so wird durch die Bank automatisch der frühestmögliche Termin gewählt. Sollte das gewünschte Datum vor dem frühestmöglichen Datum liegen (Einreichfrist!), so passt die Bank dieses i.d.R. automatisch an.

bool $sepa->setDate(string $date);

// PHP
$sepa->setDate("2013-12-14");

# Perl
$sepa->setDate("2013-12-14");

// Java
sepa.setDate("2013-12-14");

Normalerweise werden alle Lastschriften in einem Block gebucht. Mit der Funktion setBatchBooking können Sie dieses Verhalten optional auf Einzelbuchungen umstellen. Bitte beachten Sie, dass Ihre Bank dieses Verfahren in manchen Fällen erst freischalten muss.

bool $sepa->setBatchBooking(bool $enabled);

// PHP
$sepa->setBatchBooking(FALSE);

# Perl
$sepa->setBatchBooking(0);

// Java
sepa.setBatchBooking(false);

Standardmäßig erzeugt libsepa SEPA-Basislastschriften (CORE). Mit dem Befehl setDDType() können Sie alternativ auch COR-1- oder B2B-Lastschriften erzeugen:

bool $sepa->setDDType(int $ddtype);

// PHP
$sepa->setDDType(SEPA_DDTYPE_B2B);

# Perl
$sepa->setDDType(SEPA_DDTYPE_B2B);

// Java
sepa.setDDType(SEPA.SEPA_DDTYPE_B2B);

Die einzelnen Transaktionen übergeben Sie anschließend mittels der Methode add() als Objekt/Hashreferenz:

bool $sepa->add(object $tx);

// PHP
$tx = array(
  'seq'    => 'FRST',                                // Lastschrift-Typ (hier: Ersteinzug)
  'id'     => 'R2017742-1',                          // Transaktions-ID
  'name'   => 'Karl Kunde',                          // Name des Zahlungspflichtigen
  'mref'   => 'Mandats-Referenz',                    // Mandats-Referenz
  'mdate'  => '2013-09-24',                          // Unterschrifts-Datum des Mandats
  'amount' => 123.45,                                // abzubuchender Betrag
  'iban'   => 'DE12987654320012345678',              // IBAN des Zahlungspflichtigen
  'bic'    => 'BANKDEZZXXX',                         // BIC des Zahlungspflichtigen
  'ref'    => 'Rechnung R2017742 vom 17.10.2013',    // Verwendungszweck (eine Zeile, max. 140 Zeichen)
);
$sepa->add($tx);

# Perl
my $tx = {
  'seq'    => 'FRST',                                # Lastschrift-Typ (hier: Ersteinzug)
  'id'     => 'R2017742-1',                          # Transaktions-ID
  'name'   => 'Karl Kunde',                          # Name des Zahlungspflichtigen
  'mref'   => 'Mandats-Referenz',                    # Mandats-Referenz
  'mdate'  => '2013-09-24',                          # Unterschrifts-Datum des Mandats
  'amount' => 123.45,                                # abzubuchender Betrag
  'iban'   => 'DE12987654320012345678',              # IBAN des Zahlungspflichtigen
  'bic'    => 'BANKDEZZXXX',                         # BIC des Zahlungspflichtigen
  'ref'    => 'Rechnung R2017742 vom 17.10.2013',    # Verwendungszweck (eine Zeile, max. 140 Zeichen)
};
$sepa->add($tx);

// Java
String[][] tx = {
  { "seq",    "FRST" },                              // Lastschrift-Typ (hier: Ersteinzug)
  { "id",     "R2017742-1" },                        // Transaktions-ID
  { "name",   "Karl Kunde" },                        // Name des Zahlungspflichtigen
  { "mref",   "Mandats-Referenz" },                  // Mandats-Referenz
  { "mdate",  "2013-09-24" },                        // Unterschrifts-Datum des Mandats
  { "amount", "123.45" },                            // abzubuchender Betrag
  { "iban",   "DE12987654320012345678" },            // IBAN des Zahlungspflichtigen
  { "bic",    "BANKDEZZXXX" },                       // BIC des Zahlungspflichtigen
  { "ref",    "Rechnung R2017742 vom 17.10.2013" },  // Verwendungszweck (eine Zeile, max. 140 Zeichen)
};
sepa.add(tx);
  • seq: Sequenztyp. Erlaubte Werte:

    • FRST (first - Erstlastschrift)

    • RCUR (recurring - Folgelastschrift)

    • OOFF (one-off - einmalige Lastschrift)

    • FNAL (final - letztmalige Lastschrift)

    WICHTIG: wenn Sie die Lastschriftdatei via FinTS/HBCI an Ihre Bank übergeben möchten, dann darf diese nur Zahlungen vom selben Sequenztyp enthalten. In diesem Fall müssten Sie z.B. für alle Erst- und für alle Folgelastschriften jeweils separate SEPA-Lastschriftdateien erzeugen und diese einzeln an die Bank übermitteln. Via EBICS können nach unserem aktuellen Kenntnisstand verschiedene Sequenztypen in einem Auftrag übermittelt werden.

  • id: sogenannter end-to-end identifier, eine frei wählbare ID welche diese Transaktion eindeutig identifiziert und u.a. auf dem Kontoauszug des Zahlungspflichtigen ausgegeben wird. Falls es zu einer Rücklastschrift kommt, wird diese ID auch zurück übermittelt. Wird keine ID angegeben, wird standardmäßig NOTPROVIDED verwendet. Maximal 35 Zeichen (A-Za-z0-9 +?/-:().,').

  • name: Name des Zahlungspflichtigen. Maximal 70 Zeichen.

  • mref: Mandatsreferenz. Maximal 35 Zeichen (A-Za-z0-9+?/-:().,').

  • mdate: Datum, zu dem das Mandat unterschrieben wurde (Format: YYYY-MM-DD).

  • amount: Betrag in Euro (max. zwei Nachkommastellen; Dezimaltrennzeichen ist ein Punkt!)

  • iban: IBAN des Zahlungspflichtigen

  • bic: BIC des Zahlungspflichtigen

  • ref: Verwendungszweck (max. 140 Zeichen)

Sollten sich seit der letzten Abbuchung von diesem Zahlungspflichtigen Änderungen am Lastschriftmandat ergeben haben, so müssen diese mit folgenden Parametern mitgeteilt werden:

  • old_mref: wenn sich die Mandatsreferenz geändert hat, muss mit diesem Parameter die alte Mandatsreferenz mitgeteilt werden

  • old_iban: wenn sich die IBAN des Zahlungspflichtigen geändert hat, das Konto aber noch bei der selben Bank ist, dann muss hier die alte IBAN mitgeteilt werden

  • smnda: wenn sich die Bankverbindung des Zahlungspflichtigen komplett geändert hat (also: andere Bank), dann muss dieser Parameter mit dem Wert 1 übermittelt werden (SMNDA: same mandate new debtor account). Der Sequenztyp muss in diesem Fall auf FRST gesetzt werden!

Bei Lastschriften außerhalb der EU/EWR ist gemäß der Geldtransferverordnung (EU 2015/847) mit dem Rulebook 3.1 die Anschrift des Zahlungspflichtigen mit anzugeben. Dies betrifft derzeit folgende Länder: Schweiz (CH), Monaco (MC), San Marino (SM), Jersey (JE), Guernsey (GG), Isle of Man (IM), St. Pierre und Miquelon (PM):

  • addrLine1: Anschrift des Zahlungspflichtigen (max. 70 Zeichen)

  • addrLine2: Anschrift des Zahlungspflichtigen (max. 70 Zeichen)

  • addrCC: Land des Zahlungspflichtigen (ISO-3166: 2 Großbuchstaben)

Am Ende erzeugen Sie mit der Methode toXML() aus den Objektdaten das gewünschte SEPA-XML:

string $sepa->toXML();

// PHP
$xml = $sepa->toXML();

# Perl
my $xml = $sepa->toXML();

// Java
String xml = sepa.toXML();

Die XML-Daten können Sie dann z.B. in einer Datei speichern und per EBICS oder FinTS/HBCI zur Buchung an Ihre Bank schicken.

3.5. Überweisungen erzeugen

Die Erstellung von Überweisungen läuft analog zur Erstellung von Lastschriften. Lediglich die Lastschrift-spezifischen Eigenschaften (Gläubiger-ID, Lastschrift-Sequenz, Mandatsinformationen) werden nicht benötigt.

Das SEPA-Objekt für Überweisungen erzeugen Sie mit dem Nachrichtentyp SEPA_MSGTYPE_CTI:

SEPA SEPA(int $msgtype);

// PHP
$sepa = new SEPA(SEPA_MSGTYPE_CTI);

# Perl
my $sepa = new SEPA(SEPA_MSGTYPE_CTI);

// Java
SEPA sepa = new SEPA(SEPA.SEPA_MSGTYPE_CTI);

Diesem Objekt fügen Sie dann der Reihe nach den Namen des Auftraggebers (setName()), dessen IBAN (setIBAN()) und BIC (setBIC()) hinzu:

bool $sepa->setName(string $name);
bool $sepa->setIBAN(string $iban);
bool $sepa->setBIC(string $bic);

// PHP
$sepa->setIBAN("DE87200500001234567890");            // IBAN des Zahlungspflichtigen
$sepa->setBIC("BANKDEFFXXX");                        // BIC des Zahlungspflichtigen
$sepa->setName("Mustermann u. Co. KG");              // Name des Zahlungspflichtigen

# Perl
$sepa->setIBAN("DE87200500001234567890");            # IBAN des Zahlungspflichtigen
$sepa->setBIC("BANKDEFFXXX");                        # BIC des Zahlungspflichtigen
$sepa->setName("Mustermann u. Co. KG");              # Name des Zahlungspflichtigen

// Java
sepa.setIBAN("DE87200500001234567890");              // IBAN des Zahlungspflichtigen
sepa.setBIC("BANKDEFFXXX");                          // BIC des Zahlungspflichtigen
sepa.setName("Mustermann u. Co. KG");                // Name des Zahlungspflichtigen

Normalerweise werden alle Überweisungen in einem Block gebucht. Mit der Funktion setBatchBooking können Sie dieses Verhalten optional auf Einzelbuchungen umstellen. Bitte beachten Sie, dass Ihre Bank dieses Verfahren in manchen Fällen erst freischalten muss.

bool $sepa->setBatchBooking(bool $enabled);

// PHP
$sepa->setBatchBooking(FALSE);

# Perl
$sepa->setBatchBooking(0);

// Java
sepa.setBatchBooking(false);

Die einzelnen Transaktionen übergeben Sie anschließend mittels der Methode add() als Objekt/Hashreferenz:

bool $sepa->add(object $tx);

// PHP
$tx = array(
  'id'     => 'C12345-6789-0',                       // (optional) Transaktions-ID
  'name'   => 'Manfred Mitarbeiter',                 // Name des Zahlungsempfängers
  'amount' => 2345.67,                               // zu überweisender Betrag
  'iban'   => 'DE12987654320012345678',              // IBAN des Zahlungsempfängers
  'bic'    => 'BANKDEZZXXX',                         // BIC des Zahlungsempfängers
  'ref'    => 'Gehalt September 2013',               // Verwendungszweck (eine Zeile, max. 140 Zeichen)
  'purp'   => 'SALA',                                // (optional) Zahlungstyp
);
$sepa->add($tx);

# Perl
my $tx = {
  'id'     => 'C12345-6789-0',                       # (optional) Transaktions-ID
  'name'   => 'Manfred Mitarbeiter',                 # Name des Zahlungsempfängers
  'amount' => 2345.67,                               # zu überweisender Betrag
  'iban'   => 'DE12987654320012345678',              # IBAN des Zahlungsempfängers
  'bic'    => 'BANKDEZZXXX',                         # BIC des Zahlungsempfängers
  'ref'    => 'Gehalt September 2013',               # Verwendungszweck (eine Zeile, max. 140 Zeichen)
  'purp'   => 'SALA',                                # (optional) Zahlungstyp
};
$sepa->add($tx);

// Java
String[][] tx = {
  { "id",     "C12345-6789-0" },                     // (optional) Transaktions-ID
  { "name",   "Manfred Mitarbeiter" },               // Name des Zahlungsempfängers
  { "amount", "2345.67" },                           // zu überweisender Betrag
  { "iban",   "DE12987654320012345678" },            // IBAN des Zahlungsempfängers
  { "bic",    "BANKDEZZXXX" },                       // BIC des Zahlungsempfängers
  { "ref",    "Gehalt September 2013" },             // Verwendungszweck (eine Zeile, max. 140 Zeichen)
  { "purp",   "SALA" },                              // (optional) Zahlungstyp
};
sepa.add(tx);
  • id: sogenannter end-to-end identifier, eine frei wählbare ID welche diese Transaktion eindeutig identifiziert und u.a. auf dem Kontoauszug des Zahlungsempfängers ausgegeben wird. Wird keine ID angegeben, wird standardmäßig NOTPROVIDED verwendet. Maximal 35 Zeichen (A-Za-z0-9 +?/-:().,').

  • name: Name des Zahlungsempfängers. Maximal 70 Zeichen.

  • amount: Betrag in Euro (max. zwei Nachkommastellen; Dezimaltrennzeichen ist ein Punkt!)

  • iban: IBAN des Zahlungsempfängers

  • bic: BIC des Zahlungsempfängers

  • ref: (optional) Verwendungszweck (max. 140 Zeichen)

  • purp: (optional) Zahlungszweck (Purpose) - gibt an, wie die Überweisung codiert werden soll (z.B. Spende, Gehalt, Vermögenswirksame Leistungen) und entspricht dem früheren Textschlüssel bei DTA-Zahlungen. Wird kein Zahlungstyp angegeben, so wird die Zahlung als Standardüberweisung ausgeführt. Die Liste der Codes kann unter http://www.iso20022.org/external_code_list.page heruntergeladen werden; die wichtigste Codes sind:

    Code Name Beschreibung
    CBFF CapitalBuilding Vermögenswirksame Leistungen
    CHAR Charity Spende
    SALA Salary Gehaltszahlung
  • addrLine1: (optional) Anschrift des Zahlungsempfängers (max. 70 Zeichen)

  • addrLine2: (optional) Anschrift des Zahlungsempfängers (max. 70 Zeichen)

  • cc: (optional) Land des Zahlungsempfängers (ISO-3166: 2 Großbuchstaben)

Vermögenswirksame Leistungen

Für die Zahlung von vermögenswirksamen Leistungen (VL) muss als Zahlungszweck (Parameter purp) immer CBFF angegeben werden. Für den Verwendungszweck (Feld ref) gibt es derzeit zwei gängige Codierungsvarianten:

  • XXJ/Vertragsnummer (XX: wahlweise 00 oder der jeweilige Prozentsatz der Sparzulage; J: die letzte Ziffer des Jahres, für das die Leistung gelten soll)

    Diese Form wird üblicherweise bei konvertierten Bankdaten bisheriger VL-Zahlungen verwendet; hier nutzen viele Kunden/Verträge die selbe Kontonummer, die Zuordnung zum Vertrag kann daher ausschließlich über den Verwendungszweck erfolgen.

  • JJJJ (JJJJ entspricht dem Jahr, für das die Leistung gelten soll, z.B. 2013)

    Diese Form wird genutzt, wenn jeder Vertrag eine eigene IBAN-Nummer besitzt.

3.6. SEPA-Rulebook festlegen

Für die Erzeugung von SEPA-Überweisungen (pain.001) und SEPA-Lastschriften (pain.008) gelten genaue Vorschriften, die in einem sogenannten SEPA-Rulebook festgelegt sind. libsepa unterstützt derzeit folgende Rulebooks:

Land Version gültig ab Überweisungen Lastschriften Code
Deutschland 2.6 17.11.2012 pain.001.002.03 pain.008.002.02 DE-2.6
Deutschland 2.7 04.11.2013 pain.001.003.03 pain.008.003.02 DE-2.7
Deutschland 2.8 17.11.2014 pain.001.003.03 pain.008.003.02 DE-2.7
Deutschland 2.9 23.11.2015 pain.001.003.03 pain.008.003.02 DE-2.9
Deutschland 3.0 20.11.2016 pain.001.001.03 pain.008.001.02 DE-3.0
Deutschland 3.1 19.11.2017 pain.001.001.03 pain.008.001.02 DE-3.1
Deutschland 3.5 21.11.2021 pain.001.001.03 pain.008.001.02 DE-3.5
Deutschland 3.7 17.03.2024 pain.001.001.09 pain.008.001.08 DE-3.7

Mit der Funktion SEPA::init() können Sie festlegen, welches Rulebook zur Erstellung der SEPA-XML-Datei angewendet werden soll. Seit dem 21.11.2021 verwendet libsepa automatisch das Rulebook DE-3.5.

WICHTIG: die Rulebook-Version DE-3.7 gilt ab dem 17.03.2024. Da der Gültigkeitstermin aber schonmal verschoben wurde, kann es sein, dass nicht alle Banken dieses sofort ab diesem Termin unterstützen. Aus diesem Grund ist bis auf Weiteres (Stand: libsepa 2.26) standardmäßig das Rulebook DE-3.5 aktiv. Das Rulebook 3.7 müssen Sie bei Bedarf manuell aktivieren (s.u.).

Falls Ihre Bank beim Einreichen der SEPA-XML-Dateien eine Fehlermeldung in der Form Version/Format nicht unterstützt bringt, stellen Sie versuchsweise mal auf eine ältere Version um:

bool SEPA::init(int $option, string $value);

// PHP / Perl
SEPA::init(SEPA_INIT_RULEBOOK, "DE-3.1");

# Perl
SEPA::init(SEPA_INIT_RULEBOOK, "DE-3.1");

// Java
SEPA.init(SEPA_INIT_RULEBOOK, "DE-3.1");