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 / international5: aktiebolag (AB) — limited companies6: enskild firma / handelsbolag7: 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:
// 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:
- First 9 digits:
5 5 6 0 3 3 0 9 2 - Alternating weighting (×2 on even positions, ×1 on odd):
10 5 12 0 6 3 0 9 4 - Reduction of numbers > 9 (sum of digits):
1 5 3 0 6 3 0 9 4 - Sum:
1 + 5 + 3 + 0 + 6 + 3 + 0 + 9 + 4 = 31 - Checksum:
(10 - 31 % 10) % 10 = (10 - 1) % 10 = 9... no, 3 - 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:NNNNNNNNNNwhere 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.seonly 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).
Link with Skatteverket VAT number
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
- Volvo Personvagnar AB orgnummer:
- 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).