aeat.core._iban module

Shared ISO 13616 IBAN shape and checksum primitives.

One canonical home for the IBAN_SHAPE_RE pattern and iban_mod_97() check residue, consumed by domain.calculations.registry._schema.IbanString for registry casillas declaring data_type = "iban" and by the secure-storage RefundAccount model. Keeping the primitives in core lets each domain validate an IBAN without importing the other.

This module does not canonicalise operator input, decide whether a blank IBAN is allowed, or choose the public error type. Registry casilla validation rejects blank IBAN data, while the refund-account model treats None and blank input as “no account on file”; both call these primitives after applying their own boundary policy.

IBAN_SHAPE_RE

ISO 13616 IBAN shape shared by registry and refund-account validators.

The pattern checks uppercase canonical text only: country code, two check digits, and an alphanumeric BBAN for a total length of 15-34 characters. It is only the structural gate; callers must also run iban_mod_97().

iban_mod_97(canonical)[source]

Compute the ISO 13616 IBAN mod-97 check residue for an already-canonical IBAN.

Callers normalize separators and case before matching IBAN_SHAPE_RE; see domain.calculations.registry._schema._validate_iban_string() and domain.deadlines.RefundAccount._validate_iban(). This helper moves the leading four characters to the tail, replaces each letter with its A=10 ... Z=35 numeric form, and returns the integer modulo 97. A valid IBAN yields a residue of 1.

Parameters:

canonical (str) – Uppercase, separator-free IBAN text that has already matched IBAN_SHAPE_RE.

Return type:

int

Returns:

The ISO 13616 check residue. 1 means the check digits are valid.