OIB — universal 11-digit identifier (2009)
The OIB (Osobni identifikacijski broj) is the universal 11-digit identifier issued by the Porezna uprava since 1 January 2009. Foundational law: Zakon o osobnom identifikacijskom broju Narodne novine NN 60/2008. It applies to any individual or legal entity interacting with Croatian administration — citizens, domestic companies, foreign branches, and certain non-residents (notably property owners).
History — from Yugoslav MBG to universal 2009 OIB
Before 2009, Croatian administration juggled multiple Yugoslav-era identifiers: MBG (13 digits, encoding birth date), MB (statistical register matični broj), JMBG (federal Yugoslav variant abandoned after independence). This fragmentation made cross-agency reconciliation expensive and fragile.
The Zakon o osobnom identifikacijskom broju NN 60/2008 introduced a single non-significant identifier (no birth date, no gender encoding) stable for life. The 2009 mass attribution by Porezna uprava — citizens and companies — made OIB the pivotal key of every public register by 2010-2012.
Before 2009 | Coexistence of multiple identifiers inherited from Yugoslavia:
| - MBG (Matični broj građana, 13 digits) for individuals
| - MB (Matični broj) for companies in the statistical register
| - JMBG (federal Yugoslav variant, abandoned)
|
2008 | Adoption of Zakon o osobnom identifikacijskom broju,
| Narodne novine NN 60/2008. Aims for a single universal
| identifier for every government-citizen-business interaction.
|
2009-01-01 | Operational launch of OIB. Mass attribution to citizens and
| companies over 18 months by Porezna uprava.
|
2010-2012 | Full migration of public registries: Sudski registar (commercial
| register), Katastar (cadastre), HZZO (health), HZMO
| (pensions) adopt OIB as primary key.
|
2013-07-01 | EU accession — OIB becomes the official tax ID used for
| the VAT number (prefixed HR).
|
2014 | Launch of e-Građani portal consolidating public-service
| access by OIB + SDLI / NIAS identifier.
|
2018 | Fina e-Račun B2G mandate — OIB becomes the mandatory routing
| key in public e-invoices (Peppol ICD 0208).
|
2023-01-01 | Eurozone entry — no impact on OIB format, but all linked
| payments switch to EUR.
|
2024-2026 | ViDA preparation — OIB remains the pivotal identifier for
| the contemplated CTC reporting. No overhaul planned. Governance — Porezna uprava + MUP + Fina
OIB is assigned and managed by the Porezna uprava, under the Ministarstvo financija. Citizen attribution is coordinated with the MUP (Ministarstvo unutarnjih poslova — Interior), which issues the ID card (osobna iskaznica) that has carried the OIB since 2014.
Fina and the Sudski registar (judicial register of companies, run by the Ministry of Justice) use OIB as primary key. The Porezna uprava's OIB.hr service offers a public verification API (POST + JSON) and a web form for OIB assignment to foreign individuals owning property in Croatia.
Technical schema — 11 digits, MOD-11
OIB is strictly numeric, exactly 11 decimal digits. The 11th digit is a MOD-11 check digit computed on the first 10, per Porezna uprava's public specification (finalised 2009). No digit encodes birth date, sex, or region — unlike the Yugoslav MBG.
# OIB MOD-11 verification (official Porezna uprava algorithm)
# OIB = 11 digits: 10 significant digits + 1 check digit
def verify_oib(oib: str) -> bool:
if len(oib) != 11 or not oib.isdigit():
return False
a = 10
for c in oib[:10]: # first 10 digits
a = (a + int(c)) % 10
if a == 0:
a = 10
a = (a * 2) % 11
control = (11 - a) % 10
return control == int(oib[10])
# Example: Fina OIB = 85821130368
print(verify_oib("85821130368")) # True OIB vs MBS vs MB vs HR-VAT
| Identifier | Issuer | Format | Main use |
|---|---|---|---|
| OIB | Porezna uprava | 11 digits + MOD-11 | Universal — tax, civil, public registers, Peppol ICD 0208 |
| MBS | Sudski registar | 9 digits | Judicial-register registration number (companies) |
| MB | DZS (statistics) | 8 digits | Statistical register — pre-2009 legacy, occasionally still required |
| HR-VAT | Porezna uprava | HR + 11 digits (= OIB) | Intra-EU VAT number (VIES) — HR prefix + OIB |
| NKD | DZS | 4 digits + letter | Activity code (equivalent to NAF FR / SIC US) |
Important: since 2013, the Croatian intra-EU VAT number IS the OIB
prefixed with HR. Companies do not maintain two separate
identifiers as is the case in Germany (Steuernummer vs USt-IdNr) or
France (SIRET vs intra-EU VAT number).
Adoption — ~4.2M people, ~250K companies
- ~4.2 million Croatian citizens and residents hold an OIB (HR population ~3.8M + non-residents owning property / inheriting / shareholding).
- ~250,000 active legal entities in the Sudski registar (d.o.o., j.d.o.o., d.d., obrti) — all identified by OIB.
- 100% of B2G invoicing routes via OIB since the Fina e-Račun mandate of 2018 — OIB is the Peppol key on the public buyer side.
- Reverse OIB lookup is public and free on sudreg.pravosudje.hr for legal entities — input an OIB, get name, address, status, MBS, NKD.
Common pitfalls
- Implementing Luhn instead of MOD-11. Several foreign EDI integrations reject valid OIBs because they apply generic Luhn. Use the official Porezna uprava spec (see snippet above).
- Confusing OIB and MBS. A B2G e-invoice must carry the public payer's OIB, not its MBS. Many ERPs store both in the same partner record and export the wrong one.
- Prefix-or-not with HR. VAT field (PartyTaxScheme/
CompanyID) ->
HR + OIB. Legal-entity field (PartyLegalEntity/CompanyID schemeID="0208") ->OIB without prefix. Don't mix them. - Individual OIB vs entity OIB. Format is identical (11 digits + MOD-11). Only the lookup context (Sudski registar vs MUP) distinguishes them. Don't try to infer entity type from a prefix — there is none.
- Assigning OIB to a non-resident. Possible but via specific request to Porezna uprava (form "Zahtjev za određivanjem i dodjeljivanjem OIB-a"). Mandatory procedure for any property purchase or branch incorporation in HR.