ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

Y-tunnus — PRH legal company identifier

The Y-tunnus (Yritys- ja yhteisötunnus) is the legal identifier of every company, foundation or NGO registered in Finland. Jointly operated by PRH (Patentti- ja rekisterihallitus — Finnish Patent and Registration Office) and Vero.fi, it takes the form NNNNNNN-N (7 digits + check digit). Prefixed by 0037 in the PEPPOL scheme, by FI in intra-EU VAT.

What is the Y-tunnus?

The Y-tunnus is the unique identifier assigned to every legal person registered in Finland — commercial companies (osakeyhtiö Oy, osuuskunta, kommandiittiyhtiö Ky), associations (yhdistys), foundations (säätiö) and registered individual entrepreneurs (toiminimi). It serves simultaneously as:

  • Trade Register (Kaupparekisteri) identifier — held by PRH.
  • Tax identifier — Vero.fi number for VAT, corporate tax, social contributions.
  • Customs identifier — national EORI equivalent, used for Tulli (Finnish Customs) declarations.
  • Statistical identifier — Tilastokeskus (Statistics Finland) uses the Y-tunnus for economic aggregates.
  • E-invoicing identifier — basis of the OVT-tunnus (with the 0037 prefix).

Uniqueness means there is no need for multiple numbers (SIRET vs SIREN vs VAT vs Trade Register number, like in France). All administrative life of a Finnish company revolves around a single identifier.

Format and checksum algorithm

The Y-tunnus has a simple structure: 7 digits + dash + 1 check digit. The checksum algorithm is public (validated by PRH):

text y-tunnus-checksum.txt
Y-tunnus checksum algorithm
─────────────────────────────────────────────────────

Y-tunnus = NNNNNNN-C
  where NNNNNNN = 7 sequential digits allocated by PRH
  and C = check digit (0-9), computed as follows:

Weights = [7, 9, 10, 5, 8, 4, 2]

Step 1 — Weighted sum:
  S = Σ (digit[i] × weight[i]) for i = 0..6

Step 2 — Modulo 11:
  R = S mod 11

Step 3 — Determine check digit:
  If R = 0  : C = 0
  If R = 1  : Y-tunnus invalid (PRH rejection — intentional gap)
  If R ≥ 2  : C = 11 − R

Example: 1234567
  S = 1·7 + 2·9 + 3·10 + 4·5 + 5·8 + 6·4 + 7·2
    = 7 + 18 + 30 + 20 + 40 + 24 + 14
    = 153
  R = 153 mod 11 = 10
  C = 11 − 10 = 1
  Full Y-tunnus: 1234567-1

Note: if step 2 yields R = 1, the number is invalid by construction — PRH never allocates these sequences, leaving a reserve range. A detail that throws off developers (not finding a check digit between 1 and 10 is not an error, it's the spec).

PRH — governance and registries

PRH (Patentti- ja rekisterihallitus) is the Finnish Patent and Registration Office, a Finnish State agency attached to the Ministry of Economic Affairs and Employment (Työ- ja elinkeinoministeriö). Beyond patents, trademarks and designs, PRH maintains:

  • Kaupparekisteri — Trade Register: commercial companies (Oy, Oyj, Ky, Ay), registered individual entrepreneurs (toiminimi).
  • Yhdistysrekisteri — Associations Register (yhdistys).
  • Säätiörekisteri — Foundations Register (säätiö).
  • Yrityskiinnitysrekisteri — Business Mortgages Register.

Registration, articles of association, registered office and the list of legal representatives are public. All raw data lookups are free, only PRH-signed certified extracts are paid.

text prh-api-sample.txt
# Company search via Avoindata.prh.fi API
# All active Y-tunnus are public, free, open data.

GET https://avoindata.prh.fi/bis/v1?totalResults=true&maxResults=10&resultsFrom=0&businessId=1234567-1

Response (JSON):
{
  "type": "results",
  "version": "1",
  "totalResults": 1,
  "resultsFrom": 0,
  "previousResultsUri": null,
  "nextResultsUri": null,
  "exceptionNoticeUri": null,
  "results": [
    {
      "businessId": "1234567-1",
      "name": "Esimerkki Yritys Oy",
      "registrationDate": "2010-04-15",
      "companyForm": "OY",
      "detailsUri": "https://avoindata.prh.fi/bis/v1/1234567-1",
      "businessLines": [
        {
          "code": "62010",
          "name": "Computer programming activities",
          "language": "EN",
          "registrationDate": "2010-04-15"
        }
      ],
      "addresses": [...]
    }
  ]
}

Y-tunnus → FI VAT, and back

The Finnish intra-EU VAT number is mechanically derived from the Y-tunnus:

  1. Remove the dash: 1234567-112345671
  2. Add the prefix FI: FI12345671

Conversely, from a Finnish VAT number, the Y-tunnus is recovered by:

  1. Removing FI
  2. Inserting a dash before the last digit

This deterministic relation makes SAP/Oracle matching trivial between the supplier master data (Y-tunnus) and the intra-EU VAT return (FI prefix). No ambiguity — not the case in France (SIREN ≠ intra-EU VAT in group situations).

PEPPOL ICD 0037

In the PEPPOL scheme, Finland uses ICD 0037 with the Y-tunnus as identifier. The full form is:

iso6523-actorid-upis::0037:1234567-1

or in short form in some Finvoice contexts (no dash):

iso6523-actorid-upis::0037:12345671

The official normalisation (PEPPOL Coordinating Community + Tieke) keeps the form with dash (1234567-1) — this is the form published in the international SMP/SML registry.

Common pitfalls

  • Confusing Y-tunnus and OVT-tunnus. Y-tunnus = legal identifier (NNNNNNN-N, 9 chars). OVT-tunnus = e-invoice routing address (12-17 chars, 0037 prefix). The OVT contains the Y-tunnus but is not reducible to it.
  • Dash in the wrong place. The dashed form is before the last digit (1234567-1), not before the second-to-last (123456-71). Old CSV tools sometimes break this rule.
  • Believing every Y-tunnus is active. A struck-off company (lakannut yhtiö) keeps its Y-tunnus, but the PRH API returns a passiivinen status. Always check the status before issuing an invoice.
  • Confusing Y-tunnus and HETU. HETU (henkilötunnus) is the Finnish personal social security number (format DDMMYY-XXXX). Never use a HETU instead of a Y-tunnus in a Finvoice — GDPR + personal data disclosure risk.
  • Forgetting the checksum. A Y-tunnus with an invalid check digit must be rejected ERP-side before any PRH call. Many Finvoice operators silently reject invoices with an invalid Y-tunnus.