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.
libsepa kann die IBAN und BIC für gültige deutsche Bankverbindungen berechnen (siehe Hintergrund zur 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. |
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 |
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
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.
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.
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)
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.
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");