Carácter de control Luhn mod N
Con el alfabeto abcdef, la secuencia abcdef recibe el carácter de control e, y el código protegido queda abcdefe. Luhn mod N aplica la regla clásica de duplicar y sumar en base N, para códigos con letras, hexadecimal o un juego de caracteres propio. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Texto
- abcdef
- Alfabeto
- abcdef
- Modo de cálculo
- Compute
- Carga útil
- abcdef
- Carácter de control
- e
- Con dígito de control
- abcdefe
El Luhn clásico solo admite dígitos 0–9. Los identificadores reales suelen mezclar letras, hex, Base36 o un alfabeto propio y aun así necesitan un carácter de control final que detecte errores de tecleo. Luhn mod N asigna un punto de código a cada símbolo de su alfabeto, aplica la misma idea de duplicar y sumar de derecha a izquierda en base N y devuelve un carácter de control de ese mismo alfabeto. Esta capacidad calcula ese carácter para una carga útil, o valida una cadena completa que ya termina con uno, y falla de inmediato si el texto contiene símbolos fuera del alfabeto para que usted no acepte basura en silencio.
Qué es Luhn mod N y cómo amplía el Luhn clásico
El algoritmo original de Hans Peter Luhn protege cadenas de dígitos alternando un factor doble desde la derecha, replegando los valores duplicados a un solo dígito, sumando y eligiendo un dígito de control para que el número completo sea congruente con cero módulo diez. Esa regla sostiene tarjetas de pago, colas de IMEI y muchos identificadores nacionales, pero asume que N vale diez y que cada carácter es un dígito decimal.
Luhn mod N conserva la misma estructura y permite que N sea el tamaño de cualquier alfabeto ordenado que usted defina: cada carácter se mapea a un punto de código de cero a N menos uno, el repliegue pasa a ser la suma de los dígitos en base N del factor por el punto de código, y el resultado se vuelve a mapear a un carácter de ese alfabeto.
Prefiera un N par si le importan las garantías clásicas de detección; alfabetos impares siguen produciendo un carácter determinista, pero debilitan la cobertura de sustituciones y transposiciones simples. Frente a Damm (solo dígitos, tabla de cuasigrupo) y a dígitos de códigos de barras ligados a EAN o ISBN, Luhn mod N encaja cuando sus códigos ya son alfanuméricos y desea un esquema compartido de emisión y validación.
Dónde encajan los caracteres de control Luhn generalizados en sistemas reales
Las etiquetas de almacén y activos suelen mezclar letras y dígitos para que los operarios las lean en voz alta; añadir un carácter Luhn mod N detecta intercambios adyacentes y sustituciones simples antes de que un escaneo manual cree el envío equivocado. Las claves de licencia y cupones que ya excluyen caracteres confusos aún necesitan un dígito de integridad barato que los socios puedan reimplementar sin un secreto compartido; publicar el alfabeto y este algoritmo basta.
Las pruebas de integración fijan goldens frente a ejemplos al estilo Wikipedia, como la carga abcdef sobre el alfabeto abcdef con carácter e, para que las actualizaciones no cambien el esquema en silencio. No trate un control superado como prueba de autorización o propiedad: solo demuestra que la cadena está bien formada bajo Luhn mod N para ese alfabeto, el mismo criterio de honestidad que aplica a cualquier suma de control.
Qué puede hacer con ella
Auditar columnas de identificadores exportados
Valide por lotes cada código de un CSV de socio o exportación de almacén y aísle las filas cuyo carácter de control ya no coincide con el valor recalculado para su alfabeto.
Preguntas frecuentes
¿Qué es un carácter de control Luhn mod N?
Es un único carácter final calculado con el algoritmo Luhn generalizado sobre un alfabeto de tamaño N, de modo que los errores de tecleo habituales hacen fallar la validación de la cadena completa.
¿Qué ocurre si text contiene símbolos que no están en alphabet?
Las tareas de validación fallidas no se facturan.
¿Es gratuita la herramienta Luhn mod N?
La herramienta del navegador es gratuita y se ejecuta en local.
¿Cómo se convierten los caracteres en números?
Por su posición en el alfabeto que usted indica: el primer carácter vale 0, el siguiente 1 y así hasta N menos 1, donde N es la longitud del alfabeto. Con abcdef, la a vale 0, la f vale 5 y N es 6.
¿Por qué conviene que el alfabeto tenga un número par de caracteres?
Porque un N par conserva la capacidad de detección del Luhn clásico. Un alfabeto impar sigue dando un carácter de control fijo y repetible, pero detecta menos caracteres sueltos equivocados y menos vecinos intercambiados.
Herramientas relacionadas
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su 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)Ejemplo de solicitud
{
"text": "abcdef",
"alphabet": "abcdef"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.luhn_mod_n",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |
Notas técnicas
Ejecútela gratis en el navegador o llame a la API de KIT al precio publicado; ambas rutas usan la misma aritmética pura, sin red y sin valores almacenados.
Qué es Luhn mod N y cómo amplía el Luhn clásico
La respuesta nombra siempre el algoritmo luhn_mod_n para que registros y contratos de socios documenten qué esquema protegió el valor.
Cómo calcular un carácter de control o validar una cadena completa
Envíe text como la carga útil sin carácter de control en el modo compute (el predeterminado), y alphabet como el conjunto ordenado de símbolos válidos. Texto vacío, alfabeto ausente, alfabetos con menos de dos caracteres distintos y valores de mode desconocidos fallan antes de cualquier aritmética y no se facturan. Use dígitos 0123456789 para reproducir generación estilo Luhn mod-10 en cargas solo numéricas; use 0-9A-Z para códigos de producto estilo Base36; use un alfabeto de casa cuando su inventario ya prohíbe glifos ambiguos como O y 0. El motor asigna puntos de código sucesivos a cada carácter distinto del alfabeto, recorre la carga de derecha a izquierda y devuelve check_character más with_check (carga más ese carácter). El modo validate espera una cadena completa de al menos dos caracteres; la respuesta incluye valid, el check_character final, expected_check_character recalculado desde el prefijo y la subcadena payload sin el último carácter para que las interfaces muestren una corrección clara. Todo símbolo de text debe figurar en alphabet: si hay alguno fuera, la llamada falla con invalid_input y el mensaje enumera esos símbolos para que usted corrija el alfabeto o elimine el ruido antes de reintentar. Como la ruta es parse puro sin reloj, aleatoriedad ni red, la misma entrada produce siempre el mismo JSON en la herramienta gratuita del navegador y en la API. A $0.002 por solicitud correcta puede proteger importaciones masivas, impresoras de etiquetas y formularios de alta sin un plan a medida.
Dónde encajan los caracteres de control Luhn generalizados en sistemas reales
Los programas de membresía y fidelización que superaron los identificadores solo numéricos pueden conservar una sola ruta de emisión: generar una carga secuencial o aleatoria en el alfabeto de casa, llamar a compute, guardar with_check y validar en cada formulario y archivo de socio. Los trabajos de calidad de datos recalculan expected_check_character para cada fila de una exportación y aíslan las discrepancias, lo que capta tanto ediciones humanas como errores de generadores. En cada flujo el contrato es el mismo: text más alphabet, compute o validate, JSON estructurado que se puede contrastar con goldens, comportamiento idéntico gratis en el navegador o con saldo KIT prepago, y fallo honesto cuando hay símbolos fuera del alfabeto.
Casos de integración
Emitir códigos alfanuméricos de producto o activo
Genere una carga en su alfabeto de casa, llame al modo compute y almacene o imprima with_check para que cada código nuevo lleve un carácter final Luhn mod N.
Validar códigos tecleados o escaneados en la entrada
Cuando un usuario o un escáner envía una cadena completa, llame al modo validate y bloquee la consulta si valid es false, mostrando expected_check_character para corregir un solo error de tecleo.
Preguntas técnicas
¿Cómo calculo un carácter de control con esta API?
Haga POST con text igual a la carga, alphabet igual a su conjunto ordenado de caracteres y mode compute (u omita mode). La respuesta incluye check_character y with_check.
¿Cómo valido una cadena que ya tiene carácter de control?
Haga POST con la cadena completa, el mismo alphabet y mode validate. La respuesta incluye valid, check_character, expected_check_character y payload sin el último carácter.