Numéro d'entreprise, numéro BCE et numéro de TVA : différences
Numéro d'entreprise et numéro de TVA belges : ce qui les distingue, comment le numéro de TVA se construit et quoi stocker dans votre base de données.
Dans les factures, les formulaires et les API, plusieurs termes se croisent autour du numéro d’entreprise et du numéro de TVA. Ils se ressemblent, mais ne désignent pas la même chose, et les confondre produit des doublons, des clients introuvables et des contrôles TVA qui échouent. Ce guide remet les choses en ordre et propose un modèle de données propre.
Les trois termes en deux minutes
- Numéro d’entreprise : l’identifiant officiel d’une entreprise belge, 10 chiffres, écrit
0xxx.xxx.xxx. Il identifie la société ou l’entreprise individuelle. - Numéro BCE : simple synonyme de numéro d’entreprise, le même identifiant à 10 chiffres. Gardez-le en tête pour les libellés de vos champs et vos recherches.
- Numéro de TVA : un identifiant fiscal construit à partir du numéro d’entreprise :
BEsuivi des 10 mêmes chiffres, par exempleBE0123456789. Les exemples de ce guide sont illustratifs.
Retenez la logique : le numéro d’entreprise identifie l’entreprise, le numéro de TVA décrit son statut vis-à-vis de la TVA. Le premier existe toujours, le second pas forcément.
Comment le numéro de TVA est construit
Pour une entreprise belge, le numéro de TVA est BE plus le numéro d’entreprise sans points :
| Numéro d’entreprise | Numéro de TVA |
|---|---|
0123.456.789 | BE0123456789 |
0123456789 | BE0123456789 |
Il n’y a donc aucun calcul spécifique : le numéro d’entreprise suffit pour dériver un numéro de TVA candidat. Mais ce numéro n’est qu’un candidat. Rien ne garantit qu’il soit actif, et c’est ce qu’il faut vérifier ensuite. La procédure est décrite dans vérifier un numéro de TVA belge avec VIES.
L’histoire des 9 et des 10 chiffres
Les anciens numéros d’entreprise comptaient 9 chiffres. Un zéro initial a été ajouté pour arriver à 10 chiffres. Vous rencontrerez donc encore, dans de vieilles factures, de vieux contrats ou des fichiers exportés, des numéros du type BE 123.456.789 ou 123456789.
Le correctif est simple : si vous avez 9 chiffres, ajoutez un 0 devant. Le même problème apparaît quand un tableur transforme 0123456789 en nombre et supprime le zéro. Dans les deux cas, la règle est identique et se trouve dans le code plus bas.
Quand il n’y a pas de numéro de TVA
Un numéro d’entreprise n’est pas automatiquement un numéro de TVA actif. Quelques cas courants :
- certaines ASBL et fondations dont l’activité n’est pas soumise à la TVA ;
- certaines professions exemptées, comme des médecins ;
- des indépendants sous le régime de la franchise de TVA pour petites entreprises ;
- des entreprises dont l’assujettissement a pris fin.
Dans ces cas, BE plus 10 chiffres donne un identifiant qui sera refusé par VIES. Ce n’est pas une erreur de saisie : l’entreprise existe, mais n’a simplement pas de numéro de TVA. Votre application doit accepter cette situation au lieu de bloquer la saisie.
Ce qu’il faut stocker
Une bonne structure sépare l’identité de l’entreprise de son statut TVA.
| Colonne | Type | Rôle |
|---|---|---|
enterprise_number | texte, 10 chiffres | Clé unique, sans points ni préfixe |
vat_number | texte, peut être nul | BE plus 10 chiffres, dérivé ou saisi |
vat_valid | booléen, peut être nul | Résultat de la dernière validation VIES |
vat_checked_at | horodatage, peut être nul | Date et heure de cette validation |
legal_form, name, address | texte | Données de fiche, à rafraîchir |
Quelques règles pratiques :
- Le numéro d’entreprise est la clé. Il ne change pas quand l’entreprise déménage ou renomme sa société.
- Stockez-le comme texte, jamais comme entier, pour garder le zéro initial.
- Le numéro de TVA vit à côté, avec le résultat de sa validation et la date, car une validation est un fait daté, pas une propriété permanente.
- Un numéro de TVA vide est normal.
nullne veut pas dire erreur.
Normaliser en JavaScript
Ce code accepte 0123.456.789, 0123456789, BE0123456789 ou un numéro de 9 chiffres, et renvoie une forme canonique.
function normalizeEnterpriseNumber(input) {
let digits = String(input).toUpperCase().replace(/^BE/, "").replace(/\D/g, "");
// Anciens numéros à 9 chiffres, ou zéro perdu dans un tableur
if (digits.length === 9) digits = "0" + digits;
if (!/^[01]\d{9}$/.test(digits)) {
return { ok: false, reason: "format" };
}
// Paire de contrôle : 97 moins (8 premiers chiffres modulo 97) doit égaler les 2 derniers chiffres
const first8 = Number(digits.slice(0, 8));
const last2 = Number(digits.slice(8));
if (97 - (first8 % 97) !== last2) {
return { ok: false, reason: "checksum" };
}
return {
ok: true,
enterpriseNumber: digits,
formatted: `${digits.slice(0, 4)}.${digits.slice(4, 7)}.${digits.slice(7)}`,
vatCandidate: `BE${digits}`,
};
}
Retournez la raison de l’échec : un format incorrect et une paire de contrôle erronée appellent deux messages différents pour l’utilisateur. Un numéro qui échoue ici n’a pas besoin d’être envoyé à l’API : la paire de contrôle détecte déjà la plupart des fautes de frappe. L’API rejette de toute façon un numéro mal formé avant toute recherche, et cela ne coûte rien.
Compléter la fiche avec l’API
Une fois le numéro normalisé, la consultation renvoie le nom, la forme juridique, l’adresse et un objet vat.
curl -s "https://api.kvkbase.nl/v1/be/lookup/0821015819?lang=fr" \
-H "Authorization: Bearer YOUR_API_KEY"
Dans la réponse, cbeNumber contient les 10 chiffres et vat regroupe number, valid, status, validatedAt et checksumValid. Lisez vat.valid comme une information datée, et rangez validatedAt dans votre colonne vat_checked_at. Une consultation coûte 1 token, comme une validation séparée. Le plan gratuit offre 50 tokens par mois : créez un compte, les tarifs sont détaillés ailleurs.
Pour retrouver un numéro à partir d’un nom, utilisez l’outil rechercher un numéro d’entreprise ou lisez rechercher un numéro d’entreprise belge. Pour tester un numéro de TVA à la main, l’outil vérifier un numéro de TVA suffit.
Pièges à éviter
- Deux clients, une entreprise. Si vous utilisez le numéro de TVA comme clé, une entreprise sans TVA ne rentre pas dans votre base, et une entreprise saisie avec et sans préfixe crée un doublon.
- Établissement et entreprise. Les numéros d’unité d’établissement commencent par 2. Ils ne sont ni un numéro d’entreprise ni un numéro de TVA.
- Validation périmée. Un numéro de TVA valide aujourd’hui peut cesser de l’être. Gardez la date de validation et revalidez avant les opérations sensibles.
- Données personnelles. Pour une entreprise individuelle, le nom est celui d’une personne et l’adresse peut être son domicile : appliquez le RGPD à ces fiches.
Pour aller plus loin dans la conformité, voyez vérifier un client ou un fournisseur belge, et la référence de l’API pour tous les champs. La page d’accueil Belgique présente l’ensemble des outils.