Compliance · · 5 min read

The Belgian Enterprise Number on Peppol: Why Scheme 0208 Is Not Optional

Belgian participants must use scheme 0208, the enterprise number. Why 9925 is a breach, the mod-97 check digit, and the rule that rejects a bad one.

Last updated .

The short answer

A Belgian business on Peppol is identified by its enterprise number from the Crossroads Bank for Enterprises — ten digits, under Peppol scheme 0208. Not its VAT number, and not scheme 9925. Service providers are contractually obliged to register Belgian participants this way, and Peppol's own validation rejects a malformed number before the invoice reaches anyone.

If you are integrating for the Belgian B2B mandate, this is the first thing to get right, because everything downstream depends on the identifier resolving.

Whether the mandate reaches a non-Belgian business at all is a separate question, and it turns on fixed establishment rather than on holding a Belgian VAT registration — when the Belgian mandate reaches a foreign company works through that test.

0208 or 9925 — and why the distinction is not stylistic

Both are real Peppol schemes. 0208 is the enterprise number; 9925 is the Belgian VAT number. Peppol as a network will carry either.

Belgium will not. The Belgian guidance is explicit that service providers must ensure any Belgian participant they service is identified using the enterprise number, and the stated consequence for refusing is withdrawal of the provider's certification. That makes the choice an obligation on the provider rather than a preference for the customer.

The practical reason is deduplication. A company can change VAT registration status; its enterprise number is the stable civil identity that the Crossroads Bank issues once. Anchoring the network on the stable identifier is what stops the same legal entity appearing twice with two different addresses.

The format, precisely

Ten digits. Belgian enterprise numbers begin 0 or 1, and the last two digits are a check digit computed as:

check = 97 − (first_eight_digits mod 97)

Worked against a real published number — Colruyt is 0417497106:

04174971 mod 97 = 91
97 − 91         = 6
→ 0417497106            ✓

You will see the number written several ways in the wild — 0417.497.106, BE0417497106, BE 0417 497 106. They are the same ten digits with punctuation and a VAT prefix. Strip both before you store it. The Peppol identifier is 0208:0417497106, with no separators and no BE.

What happens when the check digit is wrong

Peppol validates it. An invoice quoting a malformed Belgian enterprise number fails PEPPOL-COMMON-R043"Belgian enterprise number MUST be stated in the correct format" — and is rejected rather than delivered.

We learned this the direct way. Registering a Belgian test participant, we picked a plausible-looking ten-digit number and the SMP accepted it without complaint. The first invoice sent to it was rejected by the validator: the check digits for 05555555 are 23, and we had written 40. The registration had succeeded; the participant was simply unusable.

That is the failure mode worth designing against. The SMP will not tell you the number is invalid — it is a directory, not a validator. You find out when an invoice bounces, which may be weeks later and in front of a customer. Validate the check digit at the point you capture the number, not at the point you send.

Do not invent a Belgian number for testing

Two traps, both of which we hit:

Obvious numbers are already taken. 0999999922, 0987654394 and 0912345673 are all checksum-valid and all already registered in the Peppol test SML by other providers, because they are exactly what everyone else reaches for. The SML returns ERR-106 … already exist with naptr service [Meta:SMP].

DNS is not a reliable availability check. A NAPTR lookup returned nothing for all three while the SML rejected them outright. Attempt the registration to find out; do not infer availability from a resolver.

If you need a test identifier, generate one from an unremarkable base and compute the check digit properly, rather than picking a memorable pattern.

What to build

  • Validate on capture. Enterprise number fields should reject a bad check digit in the form, with a message that says which two digits were expected. Ten characters of arithmetic saves a rejected invoice.
  • Normalise before storing. Strip dots, spaces and a leading BE. Store the canonical ten digits.
  • Never derive the Peppol ID from the VAT number. They share digits in Belgium, which makes the shortcut tempting and wrong the moment you meet an entity where they diverge.
  • Enforce the scheme server-side. If your platform lets a Belgian participant be created under 9925, that is a defect regardless of what the UI offers.

GoRoute enforces both the scheme and the check digit at registration, so an invalid Belgian identifier is refused before it reaches the network rather than after an invoice fails. Other avoidable rejections are covered in invoice validation errors you can prevent.

A rejected invoice is one you have not issued. Belgium's administrative fines escalate from €1,500 to €5,000 per offence inside a three-month window, and what non-compliance actually costs makes the case that the delay in getting paid is the larger number.

The identifier also matters beyond routing. From 1 January 2028 Belgium adds near real-time reporting to the tax authority on a five-corner model, transaction by transaction and filed by both sides — Belgium's 2028 e-reporting. And if you are building for more than one country, the wider divergence is laid out in Belgium vs France vs Germany: plain Peppol here, a PDP register in France, a phase-in from 2027 in Germany.

Primary sources: einvoice.belgium.be — Peppol FAQ · FPS BOSA, Belgian Peppol Authority · Peppol BIS Billing 3.0 rules

Frequently asked questions

What is Peppol scheme 0208?
0208 is the Peppol identifier scheme for the Belgian enterprise number issued by the Crossroads Bank for Enterprises (KBO/BCE). It is the identifier Belgian participants must be registered under on the Peppol network.
Can a Belgian company use scheme 9925 instead?
No. 9925 is the Belgian VAT number scheme and is a valid Peppol scheme in general, but Belgium mandates the enterprise number for participants registered by a service provider. Registering a Belgian participant under 9925 breaches the provider's obligations.
What is the check digit on a Belgian enterprise number?
The last two digits are 97 minus the first eight digits modulo 97. For example 04174971 mod 97 is 91, and 97 minus 91 is 6, giving 0417497106. Peppol validates this and rejects invoices quoting a malformed number.
What does PEPPOL-COMMON-R043 mean?
It is the Peppol Schematron rule stating that a Belgian enterprise number must be in the correct format. An invoice that fails it is rejected outright rather than delivered.

Related posts

Building on Peppol?

GoRoute is a certified Peppol Access Point & SMP. Book a demo or read the docs to get started.

Book a demo Read the docs