Croatia formats its IBAN in 21 characters with the numeric BBAN pattern ^[0-9]{17}$, split into a 7-digit bank code (vodeći broj banke) and a 10-digit account number.
Structure
The registry example HR12 1001 0051 8630 0016 0 (a SWIFT registry test value, not a live account) decomposes as:
HR12- country code and IBAN check digits1001005- the 7-digit bank code; 1001005 is the code of the Croatian National Bank in this registry sample1863000160- the 10-digit account number
Triple-checked by design
Croatia is unusually thorough about arithmetic integrity. The bank code’s seventh digit is a control digit over the first six, and the account number’s tenth digit is a control digit over the first nine, both computed with ISO 7064 MOD 11,10 - a different algorithm family from the MOD-97 used by the IBAN wrapper. A country-aware validator can therefore reject strings that pass the IBAN checksum yet violate the national rules, catching fabricated numbers that a generic checker would wave through.
Euro adoption without renumbering
Croatia joined the EU in 2013, SEPA in 2016 for credit transfers, and the eurozone on 1 January 2023. The euro changeover is a useful case study in IBAN stability: every kuna account converted to euros overnight at the fixed rate, while the IBANs themselves did not change a single digit. Payment references, standing orders and stored beneficiary lists survived intact.
Domestically, Croatians long quoted the bank code and account number as two fields separated by a hyphen; the IBAN concatenates them without padding tricks since both fields were already fixed-length. As everywhere, all three passing checksums still only establish that an HR IBAN is well formed. The account may be closed or unissued, and the string says nothing about its owner. Verification of Payee, the EU’s name-matching control, is what confirms you are paying the right person - a formatting check never can.