Free tool
European company identifier validator
Check a Spanish NIF, French SIREN, Polish NIP, Norwegian organisation number, Finnish Y-tunnus, Swedish organisationsnummer, Croatian MBS or OIB, Belgian enterprise number, Danish CVR number, Estonian registry code, Slovak IČO, Swiss UID, Latvian registration number, Cypriot registration number, Romanian CUI, UK company number, Irish CRO number or EU VAT number. No signup, and nothing leaves your browser.
Which identifiers actually have a check digit
This is the distinction most validators blur, and it matters: "well-formed" and "exists" are different claims. A check digit proves a number is internally consistent — it does not prove the number was ever issued to a real company.
The full table, for every live country: company identifier formats by country lists the shape, regex, check digit, normalised form and API parameter of each identifier, generated from the validators on this page, with a JSON and a CSV download.
| Identifier | Check digit? | Algorithm |
|---|---|---|
| Spain — NIF / CIF / NIE | Yes | Letter from mod 23 (personal), or weighted digit sum (company) |
| France — SIREN | Yes | Luhn over 9 digits |
| France — SIRET | Yes | Luhn over 14 digits (La Poste is a documented exception) |
| Poland — NIP | Yes | Weighted sum mod 11 |
| Poland — REGON | Yes | Weighted sum mod 11 (9 and 14-digit forms) |
| Norway — organisasjonsnummer | Yes | Weighted sum mod 11 |
| Finland — Y-tunnus | Yes | Weighted sum mod 11 over seven digits (weights 7, 9, 10, 5, 8, 4, 2); a remainder of 1 is never issued |
| Sweden — organisationsnummer | Yes | Luhn check digit over all ten digits; the third digit is 2 or higher, because a personal identity number (personnummer) never has one |
| Croatia — OIB | Yes | ISO 7064 MOD 11,10 check digit over the first ten of eleven digits; it gates |
| Croatia — MBS | Advisory | Nine digits with the same MOD 11,10 check digit, but the court register documents a few legacy numbers that fail it, so a mismatch is a warning and not a rejection |
| Belgium — enterprise number | Yes | Mod 97 over ten digits starting with 0 or 1: the last two digits are 97 minus the first eight digits modulo 97 |
| Denmark — CVR number | Advisory | Eight digits with a mod-11 check (weights 2, 7, 6, 5, 4, 3, 2, 1; the sum should divide by 11), but the API validates the eight-digit format, so a mismatch is a warning and not a rejection |
| Estonia — registry code | Yes | Eight digits, the first being 1, 7, 8 or 9, with a mod-11 check digit over the first seven (weights 1 to 7, then 3 to 9 when the result is 10); it gates |
| Slovakia — IČO | Advisory | Eight digits (six or seven are read with leading zeros) with a mod-11 check (weights 8, 7, 6, 5, 4, 3, 2), but the API validates the format, so a mismatch is a warning and not a rejection |
| Switzerland — UID | Enforced | CHE plus nine digits (separators and a MWST, TVA or IVA suffix are optional) with a mod-11 check digit (weights 5, 4, 3, 2, 7, 6, 5, 4); a wrong one is rejected |
| Latvia — registration number | Enforced | 11 digits starting 4 to 9 (an LV prefix is optional) with a mod-11 check (weights 9, 1, 4, 8, 3, 10, 2, 5, 7, 6, 1; the sum must leave 3); a wrong one is rejected. The oldest 9-digit codes carry no check digit |
| Cyprus — registration number | Format only | HE (company) or AE (overseas company) and up to nine digits without a leading zero; bare digits mean HE. No check digit exists, so a well-formed number does not confirm the company |
| Romania — CUI | Advisory | 2 to 10 digits without a leading zero (an RO, CUI or CIF prefix is accepted); the last digit is a check digit (weights 7, 5, 3, 2, 1, 7, 5, 3, 2) but a few genuine numbers fail it, so a mismatch is a warning. A 13-digit number is a personal code and is refused |
| UK — company number | No | Format only — 8 digits, or 2 letters + 6 digits |
| Ireland — CRO number | No | Format only — a plain sequential integer |
| EU VAT | Varies | Per-country structure, plus the national check digit where one exists |
So for the UK and Ireland this tool reports well-formed, never valid. If a validator tells you a UK company number is "valid", it is overstating what it checked.
Why this is free
Because it costs nothing to run. It is arithmetic — no lookup, no database, no API key, and no request leaving your browser. There is no honest reason to put that behind a signup.
What it cannot tell you is whether the company exists, what it is called, who its directors are, or whether it is in insolvency proceedings. That needs the registry. The Prometiam API answers the first two across Spain, France, the UK, Ireland, Poland, Norway, Finland, Sweden, Belgium, Croatia, Denmark, Estonia, Slovakia, Switzerland, Latvia, Cyprus, Romania, Lithuania, Canada, Australia, Japan, Israel, Singapore, Colombia, Taiwan, Czech Republic, Germany, Argentina, Ukraine, Serbia, Ecuador, Chile, Mexico, the Netherlands, Brazil and the United States from one key, with 500 free credits over 14 days and card required, nothing charged for 14 days. Directors are served for Spain, France, the UK, Norway, Poland and the Czech Republic (Polish natural persons are masked by the register itself; Czech natural persons are the name and the month and year of birth only), and corporate insolvency notices for France, Germany, the UK, Austria, Switzerland, Norway, Finland, the US, the Netherlands, Denmark, Croatia, Sweden, Spain, Latvia and Estonia.
# validate the shape locally first, then look it up curl -H "Authorization: Bearer rk_live_..." \ "https://api.prometiam.com/functions/v1/risk-api/companies/search?name=telefonica&country=ES"
FAQ
Does this send my data anywhere?
No. Every calculation runs locally in your browser — no network request, no logging, no key.
Does a valid check digit mean the company exists?
No. It proves the number is internally consistent, nothing more. A well-formed number that was never issued still passes.
Can you validate an EU VAT number offline?
Only its structure, plus the national check digit where one exists. Whether it is registered and active only VIES can answer, and that needs a server-side call.
Why does the UK result say "format only"?
Because Companies House numbers carry no check digit. There is no arithmetic that could distinguish a real one from a plausible-looking fake.
Related
- Company identifier formats by country — shape, check digit, example and API parameter, with JSON and CSV
- LEI lookup — search the GLEIF register
- SIREN vs SIRET vs NIF — which identifier to store
- What is the KRS? KRS vs NIP vs REGON
- Y-tunnus lookup — find a Finnish company by business ID
- Organisationsnummer lookup — find a Swedish company by organisation number
- MBS / OIB lookup — find a Croatian company by court-register number or OIB
- Enterprise number lookup — find a Belgian company by KBO/BCE enterprise number
- CVR lookup — find a Danish company by CVR number
- Registry code lookup — find an Estonian company by registrikood
- IČO lookup — find a Slovak company by IČO
- UID lookup — find a Swiss company by UID
- Latvian registration number lookup — find a Latvian company
- Cyprus registration number lookup — find a Cypriot company
- CUI lookup — find a Romanian company by CUI
- VAT validation against VIES