Validateur de l’algorithme de Luhn
Sachez tout de suite si une suite de chiffres passe le contrôle de Luhn modulo 10 : 79927398713 le passe. Il repère tout chiffre mal saisi et la plupart des inversions de chiffres voisins, sans prétendre que le numéro existe. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Le validateur de l’algorithme de Luhn vérifie si une chaîne numérique respecte la formule bien connue de somme de contrôle modulo 10. Envoyez les chiffres tels qu’ils apparaissent, y compris les zéros initiaux, et obtenez un résultat simple, valide ou non valide. Cette capacité contrôle uniquement la somme : elle n’identifie aucun émetteur, ne confirme pas l’existence d’un compte et ne contacte aucun service externe. Toute entrée contenant autre chose que des chiffres est refusée explicitement au lieu d’être nettoyée en silence, ce qui rend l’automatisation prévisible et révèle les erreurs de format avant leur arrivée dans un autre système.
Ce qu’indique réellement un résultat Luhn
La somme de contrôle de Luhn est une règle compacte de détection des erreurs dans les suites de chiffres décimaux. En partant de la droite, l’algorithme conserve le chiffre de contrôle, double un chiffre sur deux, soustrait neuf lorsque le résultat comporte deux chiffres, puis additionne toutes les valeurs. Le numéro est valide lorsque ce total est divisible par dix.
Cette méthode détecte toute modification accidentelle d’un chiffre et de nombreuses inversions de chiffres voisins, ce qui la rend utile contre les erreurs courantes de saisie et de copie. Un résultat valide ne prouve pas que le numéro a été émis, qu’il appartient à une personne, qu’il est actif ou qu’il permet une transaction. Il indique seulement que la chaîne fournie respecte la formule de Luhn.
Cette nuance compte dans les interfaces et les pipelines : présentez le résultat comme une validité de somme de contrôle, et non comme une vérification d’identité ou de compte. Le validateur conserve la chaîne, zéros initiaux compris, sans jamais la convertir en nombre JavaScript ; les longs identifiants restent donc exacts malgré les limites de précision numérique.
Préparer l’entrée et interpréter les erreurs
Envoyez la valeur dans le champ <code>number</code> sous forme de chaîne non vide composée uniquement des caractères de zéro à neuf. Les espaces, tirets, signes plus, points décimaux, sauts de ligne et lettres sont refusés. Ce comportement strict est volontaire.
Supprimer silencieusement la ponctuation peut masquer un défaut de format en amont, modifier le sens des données copiées ou donner l’impression que deux systèmes concordent alors qu’ils ont reçu des textes différents. Si la source affiche des valeurs groupées, normalisez-les délibérément dans votre processus avant d’appeler cette capacité et conservez l’original lorsqu’une piste d’audit est nécessaire. Ne convertissez pas d’abord la chaîne en entier : vous pourriez supprimer les zéros initiaux et arrondir les valeurs longues.
Un appel réussi renvoie toujours un objet avec un champ booléen nommé <code>valid</code>. <code>true</code> signifie que le total est divisible par dix ; <code>false</code> signale une entrée syntaxiquement correcte dont la somme échoue. Une erreur d’entrée diffère d’un résultat faux et demande généralement une correction ou un examen.
Intégrer une validation déterministe aux applications
Utilisez ce validateur aux frontières où des chaînes numériques entrent dans un système : envoi de formulaire, importation en lot, migration, création de données de test ou tests d’intégration. Dans un formulaire interactif, lancez la version du navigateur après la fin de la saisie et précisez que le contrôle repère des erreurs probables sans prouver l’existence d’un compte. Pour une importation, classez les erreurs de caractères parmi les enregistrements mal formés et les résultats faux parmi les enregistrements bien formés dont la somme ne correspond pas.
Cette séparation améliore les rapports et conserve des diagnostics exploitables. L’algorithme est déterministe, n’utilise aucun réseau, ne lit aucune horloge et ne produit aucun aléa ; une entrée identique donne toujours la même sortie. Il n’applique pas non plus de règle de longueur ou de préfixe propre à un émetteur : toute chaîne non vide de chiffres suit le même calcul.
Si votre domaine impose longueur, préfixe, propriété ou état en direct, appliquez ces règles séparément.
Cas d’usage
Repérer les erreurs de saisie
Contrôlez une chaîne à l’envoi du formulaire et distinguez une somme incorrecte d’une entrée contenant lettres ou ponctuation.
Valider des importations en lot
Appliquez la même règle déterministe à chaque enregistrement entrant avant tout traitement en aval.
Créer des jeux de test fiables
Vérifiez le comportement constant des chaînes valides et non valides dans les tests d’intégration sans dépendre du réseau.
Questions fréquentes
Que signifie un résultat valide ?
La chaîne respecte la somme de contrôle modulo 10 de Luhn. Cela ne confirme ni émission, ni propriété, ni état du compte, ni possibilité de transaction.
L’entrée peut-elle contenir des espaces ou tirets ?
Non. Elle doit contenir uniquement des chiffres. Normalisez explicitement toute valeur formatée avant son envoi.
Les zéros initiaux sont-ils conservés ?
Oui. L’entrée reste une chaîne et n’est jamais convertie en type numérique.
Le validateur exige-t-il une longueur précise ?
Non. Il évalue toute chaîne de chiffres non vide. Les règles de longueur propres au domaine doivent être appliquées séparément.
Comment calcule-t-on la clé de Luhn ?
En partant de la droite, on garde le dernier chiffre tel quel et on double un chiffre sur deux parmi les suivants. Si le double donne un nombre à deux chiffres, on lui retire 9. On additionne le tout : la suite est valide si le total est divisible par 10.
Outils associés
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/math/luhn \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"number":"79927398713"}'const res = await fetch("https://api.kit.forhosting.com/math/luhn", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"number": "79927398713"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/luhn",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"number": "79927398713"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/luhn", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"number":"79927398713"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"number":"79927398713"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/luhn", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"number": "79927398713"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.luhn",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |
Notes techniques
Intégrer une validation déterministe aux applications
Les appels API utilisent le tarif de base publié de $0.002.
Questions techniques
Combien coûte un appel API ?
Chaque requête utilise le tarif de base publié de $0.002. L’expérience dans le navigateur peut exécuter localement la même logique déterministe.