Caractère de contrôle Luhn mod N
Avec l'alphabet abcdef, la suite abcdef reçoit le caractère de contrôle e et devient abcdefe. Luhn mod N applique la règle classique du double et de la somme en base N, pour des codes en lettres, en hexadécimal ou sur votre propre jeu de caractères. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Exemple résolu
- Texte
- abcdef
- Alphabet
- abcdef
- Mode de calcul
- Compute
- Charge utile
- abcdef
- Caractère de contrôle
- e
- Avec chiffre de contrôle
- abcdefe
Le Luhn classique ne traite que les chiffres 0–9. Les identifiants réels mélangent souvent lettres, hex, Base36 ou un alphabet maison, et exigent pourtant un caractère de contrôle final qui repère les fautes de saisie. Luhn mod N associe chaque symbole de votre alphabet à un point de code, applique la même idée de doublement et de somme de droite à gauche en base N, et renvoie un caractère de contrôle issu de ce même alphabet. Cette capacité calcule ce caractère pour une charge utile, ou valide une chaîne complète qui se termine déjà par un, et échoue immédiatement si l’entrée contient des symboles hors alphabet afin que vous n’acceptiez jamais silencieusement des données absurdes.
Ce qu’est Luhn mod N et comment il prolonge le Luhn classique
L’algorithme original de Hans Peter Luhn protège les chaînes de chiffres en alternant un facteur de doublement depuis la droite, en repliant les valeurs doublées en un seul chiffre, en sommant et en choisissant un chiffre de contrôle pour que le numéro complet soit congruent à zéro modulo dix. Cette règle alimente les cartes de paiement, les suffixes IMEI et de nombreux identifiants nationaux, mais suppose que N vaut dix et que chaque caractère est un chiffre décimal.
Luhn mod N conserve la même structure tout en laissant N être la taille de tout alphabet ordonné que vous définissez : chaque caractère correspond à un point de code de zéro à N moins un, le repli devient la somme des chiffres en base N du facteur multiplié par le point de code, et le résultat est remappé vers un caractère de cet alphabet.
La formulation de Wikipédia démarre le passage de génération avec le facteur deux sur le caractère le plus à droite de la charge et la validation avec le facteur un sur le caractère de contrôle final, ce que cet outil implémente exactement pour que les goldens coïncident avec la référence publique. Préférez un N pair lorsque les garanties classiques de détection comptent ; les alphabets impairs produisent encore un caractère déterministe, mais affaiblissent la couverture des substitutions et transpositions simples.
Face à Damm (chiffres seuls, table de quasigroupe) et aux chiffres de codes-barres liés aux mises en page EAN ou ISBN, Luhn mod N convient lorsque vos codes sont déjà alphanumériques et que vous voulez un schéma partagé d’émission et de validation.
Où les caractères de contrôle Luhn généralisés s’intègrent aux systèmes réels
Les étiquettes d’entrepôt et d’actifs mélangent souvent lettres et chiffres pour une lecture à voix haute ; ajouter un caractère Luhn mod N capture les permutations adjacentes et les substitutions simples avant qu’un scan manuel ne crée le mauvais envoi. Les clés de licence et codes promo qui excluent déjà les caractères confus ont encore besoin d’un chiffre d’intégrité peu coûteux que les partenaires réimplémentent sans secret partagé ; publier l’alphabet et cet algorithme suffit.
Les tests d’intégration figent des goldens sur des exemples de type Wikipédia, comme la charge abcdef sur l’alphabet abcdef donnant le caractère e, pour que les mises à niveau ne changent pas le schéma en silence. Ne traitez pas un contrôle réussi comme preuve d’autorisation ou de propriété — il prouve seulement que la chaîne est bien formée sous Luhn mod N pour cet alphabet, la même exigence d’honnêteté que pour toute somme de contrôle.
Cas d’usage
Auditer les colonnes d’identifiants exportés
Validez par lot chaque code d’un CSV partenaire ou d’un export d’entrepôt et mettez en quarantaine les lignes dont le caractère de contrôle ne correspond plus à la valeur recalculée pour votre alphabet.
Questions fréquentes
Qu’est-ce qu’un caractère de contrôle Luhn mod N ?
C’est un unique caractère final calculé avec l’algorithme Luhn généralisé sur un alphabet de taille N, de sorte que les fautes de saisie courantes fassent échouer la validation de la chaîne complète.
Que se passe-t-il si text contient des symboles absents d’alphabet ?
Les tâches de validation en échec ne sont pas facturées.
L’outil Luhn mod N est-il gratuit ?
L’outil navigateur est gratuit et s’exécute en local.
Comment les caractères sont-ils convertis en nombres ?
Selon leur place dans l'alphabet que vous fournissez : le premier caractère vaut 0, le suivant 1, et ainsi de suite jusqu'à N moins 1, N étant la longueur de l'alphabet. Avec abcdef, le a vaut 0, le f vaut 5 et N vaut 6.
Pourquoi l'alphabet doit-il compter un nombre pair de caractères ?
Parce qu'un N pair conserve la capacité de détection du Luhn classique. Un alphabet impair donne toujours un caractère de contrôle fixe et reproductible, mais repère moins de caractères erronés isolés et moins d'inversions de voisins.
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/enc/luhn-mod-n \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"abcdef","alphabet":"abcdef"}'const res = await fetch("https://api.kit.forhosting.com/enc/luhn-mod-n", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "abcdef",
"alphabet": "abcdef"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/luhn-mod-n",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "abcdef",
"alphabet": "abcdef"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/luhn-mod-n", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"abcdef","alphabet":"abcdef"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"abcdef","alphabet":"abcdef"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/luhn-mod-n", 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
{
"text": "abcdef",
"alphabet": "abcdef"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.luhn_mod_n",
"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
Exécutez-la gratuitement dans le navigateur ou appelez l’API KIT au tarif publié ; les deux chemins utilisent la même arithmétique pure, sans réseau et sans valeurs stockées.
Ce qu’est Luhn mod N et comment il prolonge le Luhn classique
La réponse nomme toujours l’algorithme luhn_mod_n afin que journaux et contrats partenaires enregistrent le schéma qui a protégé la valeur.
Comment calculer un caractère de contrôle ou valider une chaîne complète
Fournissez text comme charge utile sans caractère de contrôle pour le mode compute (par défaut), et alphabet comme ensemble ordonné de symboles valides. Texte vide, alphabet manquant, alphabets de moins de deux caractères distincts et valeurs de mode inconnues échouent avant toute arithmétique et ne sont pas facturés. Utilisez les chiffres 0123456789 pour reproduire une génération style Luhn mod-10 sur des charges purement numériques ; utilisez 0-9A-Z pour des codes produit style Base36 ; utilisez un jeu maison lorsque votre inventaire interdit déjà des glyphes ambigus comme O et 0. Le moteur mappe chaque caractère distinct de l’alphabet vers des points de code successifs, parcourt la charge de droite à gauche et renvoie check_character plus with_check (charge plus ce caractère). Le mode validate attend une chaîne complète d’au moins deux caractères ; la réponse indique valid, le check_character final, expected_check_character recalculé depuis le préfixe, et la sous-chaîne payload sans le dernier caractère pour que les interfaces affichent une correction claire. Chaque symbole de text doit figurer dans alphabet : si un caractère est hors ensemble, l’appel échoue avec invalid_input et le message liste ces symboles pour que vous corrigiez l’alphabet ou retiriez le bruit avant de réessayer. Comme le chemin est un parse pur sans horloge, hasard ni réseau, la même entrée produit toujours le même JSON sur l’outil gratuit du navigateur et sur l’API. À $0.002 par requête réussie, vous protégez imports massifs, imprimantes d’étiquettes et formulaires d’inscription sans offre sur mesure.
Où les caractères de contrôle Luhn généralisés s’intègrent aux systèmes réels
Les programmes d’adhésion et de fidélité qui ont dépassé les identifiants purement numériques peuvent conserver une seule voie d’émission : générer une charge séquentielle ou aléatoire dans l’alphabet maison, appeler compute, stocker with_check et valider sur chaque formulaire et fichier partenaire. Les tâches de qualité des données recalculent expected_check_character pour chaque ligne d’un export et mettent en quarantaine les écarts, ce qui détecte éditions humaines et bugs de générateurs.
Cas d'intégration
Émettre des codes produit ou d’actif alphanumériques
Générez une charge dans votre alphabet maison, appelez le mode compute et stockez ou imprimez with_check pour que chaque nouveau code porte un caractère final Luhn mod N.
Valider des codes saisis ou scannés à l’entrée
Lorsqu’un utilisateur ou un scanner envoie une chaîne complète, appelez le mode validate et bloquez la recherche si valid est false, en affichant expected_check_character pour corriger une seule faute de frappe.
Questions techniques
Comment calculer un caractère de contrôle avec cette API ?
Envoyez un POST avec text égal à la charge, alphabet égal à votre jeu ordonné de caractères et mode compute (ou omettez mode). La réponse inclut check_character et with_check.
Comment valider une chaîne qui a déjà un caractère de contrôle ?
Envoyez un POST avec la chaîne complète, le même alphabet et mode validate. La réponse inclut valid, check_character, expected_check_character et payload sans le dernier caractère.