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.

Bolagsverket — orgnummer and ICD 0007

Bolagsverket (Swedish Companies Registration Office) is the government agency that has managed the Swedish business registry since 1973. It assigns the famous 10-digit orgnummer — the universal identifier used everywhere, including as ICD 0007 in the PEPPOL network.

Bolagsverket mission

Bolagsverket carries 4 main missions:

  • Registration: registers all companies (aktiebolag AB, handelsbolag HB, kommanditbolag KB, ekonomisk förening, enskild firma), economic associations and foreign branches. Assigns the orgnummer.
  • Registry maintenance: maintains the central business registry (näringslivsregistret), including bylaws, board of directors, officers, legal address, share capital.
  • Accounting publication: receives and publishes annual accounts (årsredovisning) of AB companies. Late filing penalty: SEK 5-40K depending on delay.
  • Pledge and collateral: register of business pledges (företagsinteckning), security interests over business goodwill.

Orgnummer format NNNNNN-NNNN

The format is universal for all Swedish legal entities:

  • Structure: 10 digits total, displayed with a dash after 6 characters: NNNNNN-NNNN (e.g. 556033-0923).
  • First digit: identifies the legal entity category:
    • 1: deceased / estate (dödsbo)
    • 2: State, municipalities, regions (stat, kommun, landsting)
    • 3: foreign / international
    • 5: aktiebolag (AB) — limited companies
    • 6: enskild firma / handelsbolag
    • 7: ekonomisk förening (cooperatives)
    • 8: ideell förening (associations)
    • 9: trust / fund
  • Digits 2-9: sequential by category, assigned by Bolagsverket upon registration.
  • Tenth digit: Luhn checksum — calculated on the first 9 digits (see next section).
  • No reuse: an assigned orgnummer remains attached to the legal entity, even after dissolution ("avregistrerad" status).

Luhn checksum algorithm

The 10th digit is calculated by Luhn algorithm (modulo 10, ISO/IEC 7812-1), the same algorithm used for bank cards:

javascript validate-orgnr.js
// Luhn validation of a Swedish orgnummer
// The last digit is calculated by Luhn checksum on the first 9
function validateOrgNr(orgnr) {
  // Normalise: remove dashes and spaces, must be 10 digits
  const digits = orgnr.replace(/[^0-9]/g, '');
  if (digits.length !== 10) return false;

  const sum = digits
    .slice(0, 9)
    .split('')
    .map(Number)
    .reduce((acc, d, i) => {
      // Position alternates 2,1,2,1,2,1,2,1,2 (even starts with 2)
      const weighted = i % 2 === 0 ? d * 2 : d * 1;
      // If > 9, sum the two digits (equivalent to -9)
      return acc + (weighted > 9 ? weighted - 9 : weighted);
    }, 0);

  // Checksum is (10 - sum % 10) mod 10
  const checksum = (10 - (sum % 10)) % 10;
  return checksum === parseInt(digits[9], 10);
}

// Examples
console.log(validateOrgNr('5560330923'));      // true (Acme Sverige AB sample)
console.log(validateOrgNr('212000-0282'));     // true (Kammarkollegiet, State)
console.log(validateOrgNr('556036-0793'));     // true (Volvo Personvagnar AB)
console.log(validateOrgNr('1234567890'));      // false (invalid checksum)

Step-by-step Luhn algorithm for orgnummer 5560330923:

  1. First 9 digits: 5 5 6 0 3 3 0 9 2
  2. Alternating weighting (×2 on even positions, ×1 on odd): 10 5 12 0 6 3 0 9 4
  3. Reduction of numbers > 9 (sum of digits): 1 5 3 0 6 3 0 9 4
  4. Sum: 1 + 5 + 3 + 0 + 6 + 3 + 0 + 9 + 4 = 31
  5. Checksum: (10 - 31 % 10) % 10 = (10 - 1) % 10 = 9... no, 3
  6. Verification: 10th digit must be 3. With 5560330923, the 10th is 3 ✓

ICD 0007 in PEPPOL

In the PEPPOL network, each participant is identified by a schemeID:value pair according to the ICD code (International Code Designator) ISO 6523. Sweden uses ICD 0007:

  • PEPPOL format: iso6523-actorid-upis::0007:NNNNNNNNNN where NNNNNNNNNN is the orgnummer without dash (10 digits).
  • Example: Kammarkollegiet → iso6523-actorid-upis::0007:2120000282
  • Usage in UBL: <cbc:EndpointID schemeID="0007">5560330923</cbc:EndpointID> for the sender and receiver EndpointID.
  • SMP lookup: the Swedish SMP smp.peppol.digg.se only references participants using ICD 0007 on valid Bolagsverket orgnummer.
  • Other ICDs used in SE: ICD 0088 (GS1 GLN for EANCOM retail/industry flows), ICD 0184 (Danish CVR for DK-SE cross-border flows).

The Bolagsverket orgnummer and the Skatteverket VAT number are linked but distinct:

  • orgnummer: unique legal entity identifier, assigned at creation by Bolagsverket. 10-digit format.
  • VAT number (momsregistreringsnummer): tax identifier, assigned by Skatteverket upon VAT registration. Format SE + 10-digit orgnummer + 01 (12 characters, the 01 suffix indicates the VAT declination).
  • Example:
    • Volvo Personvagnar AB orgnummer: 556036-0793
    • Volvo Personvagnar AB VAT number: SE556036079301
  • One orgnummer, multiple VAT numbers: rare but possible for consolidated groups (suffix 02, 03, ...).
  • VIES: Swedish VAT numbers are validable via the European Commission VIES API for intra-community flows.

OpenData and third-party APIs

  • Bolagsverket OpenData: monthly publication of a CSV/XML dump of the registry (näringslivsregistret), CC-BY 4.0 license. Volume ~1.3M companies, ~250MB compressed. bolagsverket.se/oppnadata
  • Official API: Bolagsverket provides a paid API for real-time search (Näringslivsregistret API), usage-based pricing (~SEK 1/query).
  • allabolag.se: very popular third-party site, enriches Bolagsverket with financial data, group hierarchy, historical officers. Freemium API.
  • retriever.se: Bisnode (Dun & Bradstreet group), premium B2B data with credit scoring, KYC/AML compliance.
  • allabolag-api (open source): free Node.js wrapper around OpenData, perfect for light ERP/CRM integration.
  • SCB: quarterly publication of economic stats linked to orgnummer (aggregated turnover by SNI sector).