Chaque entreprise française a un SIREN, chacun de ses établissements a un SIRET, et la plupart ont un numéro de TVA intracommunautaire construit à partir du SIREN. Les trois portent des chiffres de contrôle : on peut donc repérer la plupart des fautes de frappe avant d’interroger le moindre service. Ce tutoriel décrit chaque format, donne du code de validation hors ligne en Python et en JavaScript, puis montre comment confirmer qu’un numéro valide correspond à une vraie entreprise.
Ce que vous allez apprendre
- À quoi ressemblent le SIREN, le SIRET et le numéro de TVA, et comment ils s’articulent
- Comment fonctionnent leurs chiffres de contrôle, et le code pour les tester hors ligne
- Pourquoi un format valide ne prouve pas que l’entreprise existe
- Comment confirmer l’entreprise, à la main ou par une API
- Les erreurs à l’origine de la plupart des mauvais numéros
Les trois numéros et leurs liens
Le SIREN identifie l’entreprise elle-même, l’unité légale. L’INSEE le définit comme un identifiant de neuf chiffres attribué à chaque unité légale ; les huit premiers chiffres n’ont aucune signification et le neuvième est un chiffre de contrôle. Il n’est attribué qu’une fois et n’est jamais réutilisé. Le SIREN de Renault est 441 639 465.
Le SIRET identifie un établissement, c’est-à-dire chaque lieu où l’entreprise exerce. L’INSEE le définit comme un numéro de 14 chiffres en deux parties : le SIREN de l’unité légale, puis le NIC, composé d’un numéro d’ordre à quatre chiffres et d’un chiffre de contrôle. Le siège de Renault a le SIRET 441 639 465 00091 : le SIREN, puis le NIC 00091.
Le numéro de TVA français est l’identifiant de TVA intracommunautaire de l’entreprise : les lettres FR, une clé à deux caractères, puis le SIREN. Celui de Renault est FR63441639465. La clé se calcule à partir du SIREN : un numéro de TVA peut donc être contrôlé à partir de son propre SIREN.
En pratique : une entreprise a un seul SIREN et un seul numéro de TVA, mais autant de SIRET que de sites. Un formulaire qui demande « le numéro de l’entreprise » doit préciser lequel.
Comment fonctionnent les chiffres de contrôle
Le SIREN et le SIRET utilisent l’algorithme de Luhn, le même que pour les numéros de carte. En partant du chiffre le plus à droite, on double un chiffre sur deux ; quand le double dépasse 9, on retire 9 ; on additionne le tout. Le numéro est valide si le total est un multiple de 10. Pour le SIRET, le contrôle porte sur les 14 chiffres, ce qui protège aussi la partie SIREN.
La clé de TVA fonctionne autrement. Elle se calcule à partir du SIREN avec cette formule :
clé = (12 + 3 × (SIREN mod 97)) mod 97
Le résultat s’écrit sur deux chiffres. Nous avons vérifié la formule sur des numéros réels : pour Renault, 441 639 465 donne la clé 63 (FR63441639465), et pour Doctolib, 794 598 813 donne la clé 14 (FR14794598813). Le service VIES de la Commission européenne fait foi pour confirmer qu’un numéro de TVA est enregistré.
Valider hors ligne, en Python
Ces fonctions tournent sans aucun accès réseau. Elles retirent d’abord espaces et points, car les numéros arrivent formatés de toutes les façons.
import re
def chiffres(valeur: str) -> str:
return re.sub(r"[\s.\-]", "", valeur)
def luhn_ok(numero: str) -> bool:
total = 0
for i, c in enumerate(reversed(numero)):
n = int(c) * (2 if i % 2 else 1)
total += n - 9 if n > 9 else n
return total % 10 == 0
def siren_ok(valeur: str) -> bool:
d = chiffres(valeur)
return len(d) == 9 and d.isdigit() and luhn_ok(d)
def siret_ok(valeur: str) -> bool:
d = chiffres(valeur)
return len(d) == 14 and d.isdigit() and luhn_ok(d)
def cle_tva(siren: str) -> str:
return f"{(12 + 3 * (int(siren) % 97)) % 97:02d}"
def tva_fr_ok(valeur: str) -> bool:
v = chiffres(valeur).upper()
if not re.fullmatch(r"FR\d{11}", v):
return False
cle, siren = v[2:4], v[4:]
return siren_ok(siren) and cle == cle_tva(siren)
print(siren_ok("441 639 465")) # True
print(siret_ok("441 639 465 00091")) # True
print(tva_fr_ok("FR63441639465")) # True
print(siren_ok("441639465"[:-1] + "6")) # dernier chiffre changé : False
Valider hors ligne, en JavaScript
Les mêmes règles, pour un formulaire web ou un service Node :
const chiffres = (v) => v.replace(/[\s.\-]/g, "");
function luhnOk(n) {
let total = 0;
[...n].reverse().forEach((c, i) => {
const d = Number(c) * (i % 2 ? 2 : 1);
total += d > 9 ? d - 9 : d;
});
return total % 10 === 0;
}
const sirenOk = (v) => /^\d{9}$/.test(chiffres(v)) && luhnOk(chiffres(v));
const siretOk = (v) => /^\d{14}$/.test(chiffres(v)) && luhnOk(chiffres(v));
const cleTva = (siren) => String((12 + 3 * (Number(siren) % 97)) % 97).padStart(2, "0");
function tvaFrOk(v) {
const s = chiffres(v).toUpperCase();
if (!/^FR\d{11}$/.test(s)) return false;
return sirenOk(s.slice(4)) && s.slice(2, 4) === cleTva(s.slice(4));
}
console.log(siretOk("44163946500091"), tvaFrOk("FR63441639465")); // true true
Lancez ces contrôles pendant la saisie et dites clairement ce qui ne va pas : « un SIREN a 9 chiffres » aide plus que « saisie invalide ».
Un format valide n’est pas une entreprise
Un chiffre de contrôle juste prouve que le numéro est bien formé. Il ne dit pas qu’une entreprise le porte, qu’elle est toujours active, ni que c’est celle que prétend votre utilisateur. Un numéro inventé a environ une chance sur dix de passer le contrôle de Luhn par hasard.
Le contrôle hors ligne filtre donc les fautes de frappe ; confirmez ensuite le numéro dans les données officielles. Deux cas demandent de l’attention :
- Un numéro valide qui ne donne rien. Certaines entreprises ont demandé à ne pas être diffusées : elles n’apparaissent pas dans l’annuaire public. Demandez un justificatif d’immatriculation plutôt que de refuser d’emblée.
- Un SIRET qui échoue au contrôle. Ne le refusez pas automatiquement si l’utilisateur assure qu’il est juste : cherchez-le d’abord. Un chiffre de contrôle faux signale presque toujours une faute de frappe, mais c’est la recherche qui tranche.
Confirmer que l’entreprise existe
À la main. Saisissez le SIREN ou le SIRET dans l’Annuaire des Entreprises, l’annuaire public de l’État qui réunit Sirene (INSEE) et le registre national des entreprises (RNE). Il affiche la dénomination, le statut (active ou cessée), le siège et les établissements. Pour comprendre ces sources, lisez les registres d’entreprises français expliqués.
Par une API. L’API Fuentio renverra l’entreprise pour un SIREN, un SIRET ou un numéro de TVA, avec sa source et sa date de vérification, à son ouverture. D’ici là, le contrôle hors ligne et un passage par l’Annuaire des Entreprises couvrent l’essentiel.
Les erreurs les plus fréquentes
Quelques erreurs expliquent la plupart des mauvais numéros dans les formulaires :
- Un SIRET dans un champ SIREN, ou l’inverse. Acceptez les deux et prenez les neuf premiers chiffres comme SIREN quand vous en recevez quatorze ; validez les deux.
- Le numéro de TVA avec des espaces ou sans FR. Normalisez avant de contrôler : retirez les espaces, passez en majuscules, puis testez le motif.
- Les zéros de tête perdus. Les tableurs suppriment les zéros au début des nombres. Stockez les identifiants en texte, jamais en nombre.
- Le SIRET du siège pour tous les sites. Si vous facturez ou livrez un site précis, demandez le SIRET de ce site.
- Un numéro recopié d’un vieux document. Une entreprise peut avoir cessé, ou un site fermé, depuis. Le chiffre de contrôle ne le dit pas ; seule une recherche le dit.
Où cela s’inscrit
Valider les numéros est la première étape de la plupart des vérifications : à l’inscription, avant une facture, en nettoyant un fichier clients. C’est peu coûteux et cela élimine la plupart des erreurs. L’étape suivante consiste à lire ce que dit le registre, ce dont parle le KYB. Voyez ce que nous couvrons pour la France et l’Espagne.
Limites. Un chiffre de contrôle prouve qu’un numéro est bien formé, pas qu’une entreprise le porte ni qu’elle est active. Les entreprises non diffusibles n’apparaissent pas dans l’annuaire public. La formule de la clé confirme qu’un numéro de TVA correspond à son SIREN, pas que l’entreprise est immatriculée à la TVA : VIES fait foi pour cela. Ceci n’est pas un conseil juridique ou fiscal.
Questions fréquentes
Le SIRET est-il le SIREN avec cinq chiffres de plus ?
Oui : les neuf premiers chiffres d’un SIRET sont le SIREN de l’entreprise, suivis du NIC (quatre chiffres pour l’établissement et un chiffre de contrôle).
Peut-on calculer le numéro de TVA à partir du SIREN ?
On peut calculer le numéro attendu : FR, la clé, puis le SIREN. Que l’entreprise soit réellement immatriculée à la TVA se vérifie sur VIES.
Pourquoi un SIREN d’apparence correcte ne donne-t-il rien ?
Soit il a été mal saisi d’une façon que le contrôle n’a pas repérée, soit l’entreprise a demandé à ne pas être diffusée. Demandez un justificatif d’immatriculation.
Faut-il bloquer un formulaire quand le contrôle échoue ?
Affichez un message clair et laissez l’utilisateur corriger. S’il insiste, cherchez le numéro avant de le refuser.
Sources
- INSEE, définition du numéro SIREN (mise à jour le 21/10/2025, consultée le 8 octobre 2026) : insee.fr
- INSEE, définition du numéro SIRET (consultée le 8 octobre 2026) : insee.fr
- Annuaire des Entreprises : annuaire-entreprises.data.gouv.fr
- Commission européenne, vérification des numéros de TVA (VIES) : ec.europa.eu
