Skip to main content
iVentureTeam

iban

A char field that checks an IBAN against the server while the user types, debounced so it does not call on every keystroke. Odoo 20 removes both the widget and the server method behind it.

September 18, 2026Updated September 18, 20264 min read
Technical nameiban
Field typeschar
Viewsform
Modulebase_iban, installed with Accounting
Used in core0 explicit uses in Odoo 19 Community or Enterprise. Removed entirely in Odoo 20.
VersionsOdoo 19.0
No-code setupNo. There is no Studio entry for this widget.
Alternativeschar, many2many_tags_banks

What the iban widget does

The widget extends the standard char field and adds a debounced validator:

this.validateIbanDebounced = useDebounced(async (ev) => {
    const iban = ev.target.value;
    if (!iban) {
        this.state.isValidIBAN = null;
    } else if (!/[A-Za-z]{2}.{3,}/.test(iban)) {
        this.state.isValidIBAN = false;
    } else {
        this.state.isValidIBAN = await this.orm.call(
            "res.partner.bank", "check_iban", [[], iban]);
    }
}, DELAY);

Three branches, three states. Empty gives null, meaning unknown rather than wrong, so an untouched field is not marked red. A value failing the local pattern is rejected immediately with no server call. Anything else goes to the server, which does the real checksum validation.

DELAY is exported as 400 milliseconds, which is long enough that typing a full IBAN produces a single call.

What this means for your team

A wrong bank account number is one of the more expensive data errors in an ERP, because it is discovered at payment time. Validating while the user types moves that discovery to the moment of entry.

The design choice worth noting is that real validation happens on the server. The browser only filters out obvious nonsense. That keeps the checksum rules in one place and means the widget cannot be tricked into approving something the server would reject.

If you are running Odoo 19 with this on your bank account forms, be aware that an Odoo 20 upgrade removes it, and the visible symptom is simply that the indicator stops appearing.

Working examples

On a bank account field in Odoo 19:

<field name="acc_number" widget="iban"/>

In Odoo 20 there is no registration to resolve, and the field renders as a plain char with no validation.

Both halves of it are gone in Odoo 20

Most removed widgets leave their server side behind. This one did not, and that makes the removal deeper than it first appears.

On the client, addons/base_iban/static/ does not exist on the 20.0 branch. The module is still there, but it contains only models/. There is no JavaScript at all.

On the server, check_iban is defined in Odoo 19 at addons/base_iban/models/res_partner_bank.py. Searching the entire Odoo 20 source tree for that name returns no .py file, only a stale compiled cache artifact left over from an earlier build. So the method the widget called is not part of the Odoo 20 source either.

That matters for anyone planning a workaround. Reimplementing the widget as a custom component will not work by itself, because there is no server method left to call. A custom solution on Odoo 20 needs both halves: a component and a validation method of your own, or a Python library doing the checksum.

Worth being precise about what we can and cannot say. We verified that the widget and the method are absent from the 20.0 source. We did not find a documented replacement, and we are not going to guess at one. If Odoo has moved IBAN validation somewhere we have not found, we will correct this page and say so.

Version compatibility

VersionStatusNotes
Odoo 19.0VerifiedVerified against the shipped 19.0 source.
Odoo 20.0Not availableWidget and its check_iban server method both absent from the 20.0 source.

Present in Odoo 19, fully removed in Odoo 20 including its server method.

What is changing in Odoo 20

Removed. The iban registration does not exist on the 20.0 branch, and the entire static/ folder has been deleted from base_iban, leaving a Python-only module.

The check_iban method the widget depended on is also absent from the Odoo 20 Python source. A view carrying widget="iban" will log a missing-widget warning and render the field as a plain char.

If live IBAN validation matters to your finance process, treat this as work to scope rather than a setting to restore.

Common problems and fixes

SymptomCause and fix
The validity indicator disappeared after upgrading to Odoo 20The widget was removed and base_iban no longer ships any JavaScript. Validate server-side in a constraint, or build a custom widget with its own validation method.
A custom reimplementation calls check_iban and fails on Odoo 20That method is not in the Odoo 20 Python source either. Implement the checksum yourself or use a Python IBAN library.
A short entry is marked invalid immediately on Odoo 19The client-side pattern requires two letters followed by at least three more characters before any server call. Expected. The indicator settles once enough of the IBAN is typed.
An empty field is not marked invalidDeliberate. An empty value sets the state to unknown rather than false. Use a required attribute if the field must be filled.

Iban widget vs the alternatives

WidgetBest forKey difference
ibanCatching a wrong bank account at entry, on Odoo 19Server-backed live validation, removed entirely in Odoo 20
charA plain account number fieldNo validation of any kind
many2many_tags_banksShowing a partner's bank accounts as tagsDisplays accounts rather than validating one

On Odoo 19, a plain char is the fallback if you do not need validation. On Odoo 20 there is no widget to switch to, so the realistic options are server-side validation in a constraint, which catches errors at save rather than as you type, or a custom widget paired with your own validation method.

Frequently asked questions

Does the Odoo iban widget still exist in Odoo 20?+
No. The registration is gone and the entire static/ folder has been removed from base_iban, leaving a Python-only module. A view using it renders a plain char field instead.
Can I reimplement Odoo's IBAN validation on Odoo 20?+
Not by calling the old method. check_iban is absent from the Odoo 20 Python source as well, so a custom solution needs both a component and your own validation, either hand-written or from a Python IBAN library.
How often does the Odoo 19 iban widget call the server?+
It debounces at 400 milliseconds and skips the call entirely when the value is empty or fails a local pattern check, so typing a full IBAN normally produces a single server call.

Bank details that only fail at payment time?

Wrong account numbers surface at the worst possible moment. We put validation where it belongs, at entry and at import, so the error is caught by the person who can still fix it rather than by a returned payment.

Talk to an Odoo consultant

How this page was produced

Verified by reading addons/base_iban/static/src/components/iban_widget/iban_widget.js on the 19.0 branch of a local clone of the official Odoo repository, with the validator quoted above and the 400 millisecond delay read from the exported DELAY constant. The removal was confirmed by listing addons/base_iban/ on the 20.0 branch, which contains only models/, and by searching the whole 20.0 tree for check_iban, which matched no Python source file. Corrections welcome via our contact page.