Dígito de control CNP rumano
Escriba 180010122114 y obtendrá el dígito de control 4, de modo que el CNP completo es 1800101221144; o pegue las trece cifras para ver si la última cumple la ponderación oficial. Útil en recursos humanos, nóminas y altas de clientes. Gratis en su navegador.
- Gratis
- Funciona en su navegador
- Sin registro
- Sus datos no salen de su equipo
Ejecutar — gratis
Ejemplo resuelto
- Cnp
- 180010122114
- Modo de cálculo
- Compute
- Entrada
- 180010122114
- Dígito de control
- 4
- Con dígito de control
- 1800101221144
- Formateado
- 1-800101-22-114-4
El código numérico personal rumano (CNP, Cod Numeric Personal) es un identificador de trece dígitos usado en registros civiles, contratos laborales, declaraciones fiscales, KYC bancario y formularios de la administración pública en Rumanía. El último dígito es un dígito de control derivado de una ponderación fija de los primeros doce dígitos según la regla modular oficial del diseño CNP. Un solo dígito mal tecleado o un par intercambiado suele romper esa suma de control, de modo que validar el CNP antes de guardar un registro de RR. HH., abrir un perfil de cliente o aceptar un archivo de socio detecta muchos errores de tecleo a tiempo. Esta capacidad calcula el dígito de control CNP rumano a partir de una carga de doce dígitos (con o sin espacios y guiones habituales), o valida un número completo de trece dígitos que ya incluye el dígito final, e informa la entrada incorrecta en lugar de inventar un dígito en silencio.
Qué es el dígito de control CNP rumano y cómo funcionan los pesos
Un CNP codifica sexo y siglo, fecha de nacimiento, condado de emisión y un número de serie en un diseño fijo de trece dígitos usado por los sistemas administrativos, fiscales y comerciales rumanos. Los formularios a veces insertan espacios o guiones para facilitar la lectura, pero el valor subyacente son siempre trece dígitos decimales. Los primeros doce forman el cuerpo; el decimotercero lo determina por completo un algoritmo de control público y no se elige libremente.
La ponderación oficial multiplica esos doce dígitos, de izquierda a derecha, por la secuencia constante dos, siete, nueve, uno, cuatro, seis, tres, cinco, ocho, dos, siete y nueve — la cadena de pesos 279146358279. Se suman los productos y el resto de esa suma módulo once es el dígito de control candidato. Cuando el resto está entre cero y nueve, ese valor es el dígito de control y completa una cadena CNP bien formada.
Cuando el resto es diez, el dígito de control se define como uno, no diez, de modo que cada cuerpo de doce dígitos se asocia a exactamente un dígito final de cero a nueve. Frente al Luhn mod-diez de tarjetas de pago, el esquema CNP usa un vector de pesos fijo de izquierda a derecha y módulo once con una regla especial para el resto diez, de modo que no debe reutilizar un validador Luhn en campos de identificación personal rumana.
Frente a los pesos del NIP polaco o a los dos dígitos mod-once del fødselsnummer noruego, la regla CNP rumana es específica de este diseño de trece dígitos y de esta cadena de doce pesos. Saber qué esquema necesita evita una falsa confianza cuando una utilidad genérica de dígito de control acepta una cadena que no es un CNP bien formado. Esta herramienta aplica la ponderación estándar sobre dígitos puros tras quitar espacios y guiones opcionales.
No consulta portales gubernamentales, no demuestra que exista una persona, no decodifica género ni condado ni asigna estado legal: solo comprueba que la cadena de dígitos es coherente con el algoritmo de control publicado.
Cómo calcular un dígito de control o validar un CNP completo
Envíe un campo cnp con dígitos del cero al nueve, opcionalmente separados por espacios o guiones. El modo validate espera un número completo de trece dígitos con el dígito de control final (por ejemplo 1800101221144 o una forma con guiones de trece dígitos). Cadenas vacías, cnp ausente, valores de mode inválidos y longitudes incorrectas fallan antes de cualquier suma ponderada y no se facturan.
HH., formularios de alta y trabajos ETL sin negociar un tramo a medida. Prefiera compute cuando ensamble un CNP a partir de un cuerpo de doce dígitos conocido; prefiera validate cuando un usuario, un archivo de socio o una etiqueta escaneada aporte un número completo y necesite un filtro booleano antes de una consulta a un registro o a datos maestros.
Dónde encajan los dígitos de control CNP en RR. HH., banca y administración
Los sistemas de recursos humanos y nómina guardan el CNP del empleado en cada documento laboral rumano legal; un solo dígito mal escrito en el alta puede hacer fallar después los envíos a seguridad social o a la hacienda. Los flujos KYC de banca y fintech que recogen un código numérico personal rumano pueden recomputar el dígito de control sin llamar a un registro externo, filtrando ruido OCR y capturas parciales de forma temprana.
Los equipos de producto que ya exponen herramientas generales Luhn o ISO 7064 deben usar aún esta capacidad específica de CNP en campos de identificación personal rumana para que pesos, límites de longitud y el tratamiento del resto diez coincidan con el dominio. Las páginas educativas y de SEO que posicionan frases como dígito de control CNP rumano o validador CNP Rumanía necesitan una herramienta gratuita en vivo cuya ruta de navegador coincida con la automatización para que las capturas de tutoriales sigan siendo exactas.
No trate un dígito de control CNP correcto como prueba de que la persona está bien identificada, viva, autorizada o presente en un registro oficial: solo demuestra que la cadena de dígitos es coherente con el algoritmo de control CNP rumano.
Qué puede hacer con ella
Auditar columnas CNP en archivos de socios y nómina
Valide por lotes cada CNP de una importación CSV y aísle las filas cuyo dígito de control ya no coincida con el valor esperado recomputado.
Preguntas frecuentes
¿Cómo se calcula el dígito de control del CNP rumano?
Multiplique los primeros doce dígitos por los pesos 2, 7, 9, 1, 4, 6, 3, 5, 8, 2, 7 y 9 (la cadena constante 279146358279), sume los productos y tome el resto módulo 11. Si el resto es 0–9 ese es el dígito de control; si es 10 el dígito de control es 1.
¿Cuál es la diferencia entre los modos compute y validate?
Compute toma doce dígitos y devuelve el dígito de control y el CNP completo de trece dígitos. Validate toma trece dígitos incluyendo el final y indica si coincide con el dígito de control recomputado.
¿Se permiten espacios y guiones?
Sí. Los separadores habituales se eliminan antes del análisis.
¿Qué ocurre si el dígito de control es incorrecto?
En modo validate la respuesta sigue incluyendo el dígito esperado y valid es false.
¿Qué pasa si el resto de la suma ponderada es 10?
En ese caso el dígito de control es 1, no 10. Esa regla especial hace que cada cuerpo de doce cifras tenga exactamente un dígito final entre 0 y 9.
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/cnp-romania \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"cnp":"180010122114"}'const res = await fetch("https://api.kit.forhosting.com/enc/cnp-romania", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"cnp": "180010122114"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/cnp-romania",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"cnp": "180010122114"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/cnp-romania", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"cnp":"180010122114"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"cnp":"180010122114"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/cnp-romania", 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
{
"cnp": "180010122114"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.cnp_romania",
"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
Úselo gratis en el navegador o llame a la API de KIT al precio publicado; ambas rutas ejecutan la misma aritmética determinista sin consulta de red y sin registro de personas reales.
Cómo calcular un dígito de control o validar un CNP completo
Letras, otra puntuación, guiones dobles o guiones al inicio o al final se rechazan como entrada mal formada con invalid_input para que nunca acepte un valor limpiado en silencio. El modo compute es el predeterminado: proporcione exactamente doce dígitos sin el dígito de control (por ejemplo 180010122114) y el motor devuelve check_digit como cadena de un carácter, with_check como la cadena completa de trece dígitos incluyendo ese dígito, y formatted en el agrupamiento legible S-YYMMDD-JJ-NNN-C. La respuesta indica valid true cuando el dígito recomputado coincide con el último, e incluye siempre check_digit, expected_check_digit, payload sin el último dígito, weighted_sum_mod11 y formatted para una visualización coherente. Como la ruta es parse puro, sin reloj, fuente aleatoria 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 exitosa puede filtrar importaciones masivas de RR.
Dónde encajan los dígitos de control CNP en RR. HH., banca y administración
El modo validate a la entrada bloquea el guardado cuando valid es false y puede mostrar expected_check_digit para que el operador corrija el formulario antes de escribir el registro. Los portales de seguros, sanidad y servicios públicos reciben CNP desde formularios y archivos de socios donde un dígito final erróneo rechazaría un lote entero; un oráculo determinista que devuelve valid y with_check permite marcar filas antes de producción. En todo flujo el contrato es el mismo: dígitos con espacios o guiones opcionales, compute o validate, JSON estructurado que puede probarse con goldens, comportamiento idéntico gratis en el navegador o con saldo KIT prepago, y fallo honesto cuando la entrada está mal formada.
Casos de integración
Filtrar campos CNP en formularios de RR. HH. y alta
Cuando un usuario envía un CNP rumano completo, llame al modo validate y bloquee el guardado si valid es false, mostrando expected_check_digit para corregir un solo error de tecleo antes de escribir el registro del empleado.
Calcular el dígito final al completar identificadores
A partir de un cuerpo de doce dígitos, llame al modo compute y guarde with_check o formatted para que cada nueva cadena CNP lleve el dígito final correcto antes de imprimir, exportar o generar presentaciones.
Preguntas técnicas
¿Cuánto cuesta la calculadora de dígito de control CNP rumano?
La herramienta del navegador es gratuita. Las solicitudes a la API usan saldo KIT prepago a $0.002 por llamada exitosa; la entrada inválida no se factura.