IČO + DIČ — legal company identifiers
Every Czech company has two distinct identifiers:
IČO (Identifikační číslo organizace, 8 digits) for
the legal identity at the Justice.cz registry via
ARES, and DIČ (Daňové identifikační
číslo, prefixed CZ + digits) for VAT when the entity is
registered. PEPPOL directory code ICD 0151.
Checksum algorithm publicly documented by ČSÚ.
History — from Czechoslovakia to ARES 2026
IČO has existed since 1989 — it was created under socialist Czechoslovakia by the Federální statistický úřad. At the 1993 split, the Czech Republic kept the 8-digit format and transferred it to ČSÚ. The DIČ was added at EU accession in 2004 for intra-EU VIES needs. The ARES portal, launched in 2010 then overhauled in 2014 and 2023, made the Czech Republic one of the EU's most advanced countries on company open data.
1989 | Creation of IČO in Czechoslovakia — 8 digits, managed by
| the Federální statistický úřad (FSÚ).
|
1993 | 1 January: Czechoslovakia split. Czech Republic keeps the
| 8-digit IČO. ČSÚ (Czech Statistical Office) takes over
| attribution.
|
2004 | EU accession. Czech DIČ aligns with the VAT directive:
| format CZ + digits (ISO prefix + IČO most often).
|
2010 | Launch of ARES (Administrativní registr ekonomických
| subjektů) — unified administrative registry on
| wwwinfo.mfcr.cz.
|
2014 | ARES overhaul — public REST API, JSON and XML, free
| access without authentication.
|
2018 | PEPPOL registry inscription — IČO gets ICD 0151
| (Czech Republic IČO). PEPPOL OPC addresses in
| 0151:NNNNNNNN.
|
2023 | ARES v2 upgrade — GraphQL API, WebSocket for near-real-time
| notifications. Retroactive coverage back to 1990.
|
2024-2026 | ARES v2 reaches 3.3M registered entities (companies,
| OSVČ self-employed, associations, foundations). Governance — Justice.cz + ČSÚ + GFŘ
Three distinct actors manage the identifiers:
- ČSÚ (Czech Statistical Office) — attributes IČO, maintains and revokes it. Authoritative source of the identifier.
- Justice.cz (Obchodní rejstřík, commercial register) — legal registry of companies (s.r.o., a.s., k.s., v.o.s.). Publishes statutes, directors, annual accounts.
- GFŘ (General Financial Directorate) — attributes DIČ at VAT registration, maintains it via the DPH portal.
The ARES portal (Administrativní registr ekonomických subjektů) consolidates data from all three sources: MF ČR, ČSÚ and Justice.cz. It is hosted on wwwinfo.mfcr.cz and publicly accessible without authentication.
Schema — IČO checksum algorithm
IČO is an 8-digit number whose 8th position is a check digit computed from the first 7 by a mod-11 algorithm:
# IČO — Check digit calculation algorithm
# Specification: ČSÚ Methodology 2010, public on statistickyurad.cz
# Format: 8 digits total (7 significant + 1 check digit)
# Example: IČO = 12345678 (where 8 is the check digit)
def calculate_ico_check(seven_digits: str) -> int:
"""Compute the 8th position (check) from the first 7."""
weights = [8, 7, 6, 5, 4, 3, 2]
sum_weighted = sum(int(d) * w for d, w in zip(seven_digits, weights))
rest = sum_weighted % 11
if rest == 0:
return 1
if rest == 1:
return 0
return 11 - rest
# Real examples (Czech public entities)
# ČEZ a.s. : IČO 45274649
# Škoda Auto a.s. : IČO 00177041
# Komerční banka a.s. : IČO 45317054
# Česká spořitelna : IČO 45244782
# Validation
assert calculate_ico_check("4527464") == 9 # ČEZ
assert calculate_ico_check("0017704") == 1 # Škoda Auto
assert calculate_ico_check("4531705") == 4 # Komerční banka
assert calculate_ico_check("4524478") == 2 # Česká spořitelna The algorithm is public and documented by ČSÚ. Every business library in the Czech Republic implements it — every Czech ERP rejects on input an IČO with a wrong check digit. Old IČO with 7 digits (companies created before 1989) are prefixed with a zero to reach 8 positions (e.g. Škoda Auto: 00177041).
IČO/DIČ vs V4 identifiers
| Country | Legal ID | VAT ID | Registry / Directory | PEPPOL ICD |
|---|---|---|---|---|
| Czech Republic | IČO (8 digits) | CZ + IČO | ARES + Justice.cz | 0151 |
| Slovakia | IČO (8 digits) | SK + 10 digits | FinStat + ORSR | 0203 |
| Poland | NIP (10) + REGON (9/14) | PL + NIP | CEIDG + KRS | 0205 |
| Hungary | Adószám (8+1+2) | HU + Adószám | e-Cégjegyzék | 0151 (HU separate) |
| Germany | HRB + USt-IdNr | DE + USt-IdNr | Handelsregister + BZSt | 0204 |
| France | SIREN (9) + SIRET (14) | FR + key + SIREN | Sirene INSEE | 0009 |
Adoption — ARES + ICD 0151 PEPPOL
- ARES v2 API — REST endpoint
https://ares.gov.cz/ekonomicke-subjekty/rest/, JSON + XML, ~50M requests/year. No authentication, no reasonable quota. - Justice.cz / OR API — dedicated endpoint for the
commercial register, annual accounts, directors, statutes.
Accessible via
or.justice.cz. - VIES check — intra-EU DIČ verification on
ec.europa.eu/taxation_customs/vies/. Every Czech DIČ appears withCZprefix. - PEPPOL SMP — addresses in format
0151:12345678in UBL Buyer/Seller. Automated routing via PEPPOL SML. - EN 16931 (BT-29 / BT-46 / BT-44) — IČO and DIČ map respectively to BT-29 (Seller legal registration ID) with scheme ID 0151, and BT-46 (Seller VAT identifier).
Common pitfalls
- Confusing IČO and DIČ. IČO exists for every company. DIČ only exists if VAT-registered. Many OSVČ under threshold have only an IČO, no DIČ.
- IČO without leading zero. IČO created before 1989 are 7 digits + 1 check. Entered without leading zero, they look like 7 digits and trigger validation errors on ARES side.
- Prefixing DIČ without CZ. Czech DIČ must
have the ISO prefix
CZfor intra-EU flows (VIES). Without prefix, DIČ is considered "national" without EU recognition. - Wrong PEPPOL ICD. For PEPPOL flows, the ICD is
0151for IČO on the entity side, not 9931 (which designates Czech OPC for financial banking transactions, different context). - Individual VAT number (rodné číslo). If the OSVČ has its DIČ based on rodné číslo (10 digits), it is personal data — ÚOOÚ (Czech DPA) has published guidance: do not display publicly.