Bank Account (IBAN / CZ / SK)

Updated: 

A form field that checks bank account numbers before the submission is stored. It accepts an IBAN from any country and Czech and Slovak domestic account numbers in the prefix-number/bank code format, and rejects numbers that fail their checksum.

Validation is pure offline maths — no external service is contacted, nothing is sent anywhere, and there is no API key, account, or per-lookup fee. For known Czech and Slovak bank codes the field also shows the bank name under the input once the number checks out, so people spot a mistyped account before they submit.

Use Cases

  • Refund and payout forms – Collect an account number you can actually pay out to, instead of discovering the typo a week later.
  • Invoicing and supplier onboarding – Capture a verified IBAN as part of a supplier or contractor registration form.
  • Czech and Slovak payment details – Accept the domestic 19-2000145399/0800 format that people in CZ and SK actually use, not just IBAN.
  • Reimbursement requests – Employees or members submit their account number and get immediate feedback if it’s wrong.

Setup Instructions

1. Enable the field

  1. Navigate to WordPress Dashboard → Settings → Form Enhancer
  2. Open the Fluent Forms tab and find Bank Account (IBAN / CZ / SK) under Fields
  3. Toggle it ON

2. Add it to a form

  1. Open your form in Fluent Forms → All Forms
  2. In the field panel, open Advanced Fields
  3. Drag Bank Account (IBAN/CZ/SK) – Form Enhancer onto the form

3. Choose the accepted format

Select the field and set Accepted format in the General tab:

OptionBehaviour
Both (auto-detect) (default)Accepts either format. A value containing / is treated as a domestic account number, anything else as an IBAN.
IBAN onlyA domestic account number is rejected with “Please enter an IBAN, not a domestic account number.”
Domestic account number only (CZ/SK)An IBAN is rejected with “Please enter a domestic account number in the prefix-number/bank code format.”

Pinning the format is worth it when the receiving end only handles one of them — the visitor gets told which format to use, instead of being told their perfectly good number is invalid.

Each field is configured separately, so one form can hold an IBAN-only field and a domestic-only field side by side.

Key Features

IBAN validation (89 countries)

An IBAN is validated with the standard mod-97 checksum and against the expected length for its country code, using the length table from the SWIFT IBAN registry. Spaces are ignored and lowercase input is accepted, so cz65 0800 0000 1920 0014 5399 validates just like CZ6508000000192000145399.

Because the check is mathematical, it confirms the number is well-formed — it does not confirm the account exists or who owns it.

Czech and Slovak domestic accounts

Domestic numbers use the format prefix-number/bank code, with the prefix optional:

19-2000145399/0800
2000145399/0800

Both the prefix and the account number are validated with the mod-11 weighted checksum from the Czech National Bank decree (Czechia and Slovakia inherited the same Czechoslovak scheme, so one check covers both), and the number part must contain at least two non-zero digits.

The bank code is only checked for shape — four digits — and never against the bundled list. A newly assigned bank code therefore can never be rejected by an outdated plugin.

Bank name hint

Once the typed value passes the same checksum the server runs, the field shows the bank’s name below the input — 47 Czech bank codes (source: ČNB) and 38 Slovak ones (source: NBS). It works for domestic numbers and for IBANs whose bank code sits directly after the check digits.

An invalid number never shows a bank name, which makes the hint a useful “did I type this right?” signal in itself.

Validated again on the server

The hint runs in the browser for instant feedback, but the decision is made server-side on submit. A visitor who disables JavaScript, or edits the page, still cannot store an invalid number.

Customization

Both filters are optional — the field works with no code at all.

// Turn off the bank name hint entirely.
add_filter('formenhancer/bank_account/show_bank_name', '__return_false');
// Add or override bank codes, e.g. a newly assigned Czech code.
add_filter('formenhancer/bank_account/bank_codes', function (array $codes) {
    $codes['CZ']['9999'] = 'My New Bank, a.s.';
    return $codes;
});

The bank code list is keyed by ISO country code, so adding another country is a data-only change — both the domestic lookup and the IBAN lookup pick it up.

Notes

  • No external service. Unlike the EU VAT or IČO fields, this one never makes a network request. It works offline, on staging, and behind a firewall, and adds no latency to submission.
  • Checksum, not ownership. A valid number is well-formed. It does not prove the account exists, is open, or belongs to the person filling in the form.
  • Bank names are informational. They come from a bundled list and are used only for the hint — never to accept or reject a number.
  • Works everywhere Fluent Forms does, including Conversational Forms, and the field can be used in the form editor’s conditional logic.