PHP Classes


Recommend this page to a friend!
  Classes of Stefan Kientzler   PHP SEPA XML Generator   Download  
Role: Documentation
Content type: text/markdown
Description: Documentation
Class: PHP SEPA XML Generator
Generate SEPA XML to define a payment instructions
Author: By
Last change: Update
Date: 1 year ago
Size: 5,401 bytes


Class file image Download

PHP SEPA XML Generator: Generate SEPA XML to define a payment instructions

Latest Stable Version License Donate Minimum PHP Version Scrutinizer Code Quality codecov

New Features

  • Support of Sepa Versions 2.9 and 3.0
  • Support of ISO 20022 Purpose / CategoryPurpose - Codes
  • A full documentation on Github


The SEPA (Single Euro Payment Area) is a system of transactions created by the EU (European Union) to harmonize the cashless payments within the EU countries. This package supplies the two main transactions provided by the SEPA-System:

Direct Debit Transaction

Get Payments from partners/customers/members issued an 'SEPA mandate'. The SEPA-mandate contains complete Bank Account Details: - Name of financial institute - IBAN (International Bank Account Number) - BIC (Business Identifier Code) - Mandate-ID (internal generated unique ID ? have to be re assigned to a customer (?) in case he has changed bank account!) - Date, the owner of the account has authorized and signed the Mandate.

Credit Transfer Transaction

Dispose payments to any partner. To initiate a credit transfer transaction, no SEPA-Mandate is needed. Complete bank account information to the recipient is sufficient.

Preconditions to participate on the SEPA-System

To invoke some SEPA transaction the participants needs: - Valid bank account (Name of financial institute, IBAN, BIC) - CI (Creditor Scheme Identification)

Participating countries

> A total of 32 European countries participate in SEPA. In addition to the 27 EU countries, the three countries of the rest of the European Economic Area (EEA) as well as Switzerland and Monaco also participate in SEPA. SEPA payments can only be processed in euros. The SEPA procedure cannot be used for payments in other currencies. A foreign transfer is still required here. This makes it very clear that SEPA is only made in EURO to the 32 countries. In the 32 countries, the seat of the house bank of the debtors / creditors is decisive.


You can download the Latest release version from


SepaTest shows simple code to generate a valid SEPA XML-File.

A full documentation can be found on Github

Specify additional country validation(s)

If the validation for a required country is not yet included in the package, it can be added as described below. (It would be nice to send new validations to me. So I can integrate them into the package in order that other users can also benefit from -

To define country specific validation for IBAN, BIC and CI create a class extending *SepaCntryValidationBase* and call *Sepa::addValidation('CC', 'MyValidationClassName');*

For most of the participating countries, it is sufficient to specify in the constructor the respective length, the formatting rule (RegEx) and the information whether alphanumeric characters are allowed.

If more complicated rules apply in a country, the respective method for validation can be redefined in the extended class in order to map this rule. (as an example, look at implementation of SepaCntryValidationBE class)

class MyValidationClassName extends SepaCntryValidationBase
     * create instance of validation.
     * @param string $strCntry  2 sign country code
    public function __construct($strCntry)
        $this->strCntry = 'CC';	// MUST contain the desired country code
        $this->iLenIBAN = 20;
        $this->strRegExIBAN = '/^([A-Z]){2}([0-9]){18}?$/';
        $this->iLenCI = 18;
        $this->strRegExCI = '/^([A-Z]){2}([0-9]){2}([0-9A-Z]){3}([0-9]){11}?$/';

Information on country specific formats can be found on IBAN: ECBS - European Banking Resources| CI: European Payments Council - Creditor Identifier Overview|

Translate error messages

In order to receive the error messages of the various validation functions in the desired language, one of the files sepa_errormsg_de.json or sepa_errormsg_en.json can be used as a template and translated accordingly. The translated messages must then be loaded using the method *Sepa :: loadErrorMsg ('sepa_errormsg_XX.json')*