La cédula de identidad ecuatoriana y el número del registro único de contribuyentes -RUC- tienen un algoritmo especial muy sencillo que es conveniente dominar para su implementación efectiva en proyectos informáticos. Su verificación es muy útil para garantizar la calidad de los datos de una manera sencilla. Por ejemplo, cuando se digitan números de cédula de identidad muchas veces se comenten errores de tipeo, los cuales se los podría detectar inmediatamente automatizando su verificación.
Un ejemplo donde conviene realizar esta validación es en las facturas electrónicas, donde antes de remitir la factura al SRI se puede comprobar que esté correcta la cédula o RUC del receptor de la factura.
Estructura del Número de Cédula de Identidad
El Estado Ecuatoriano, a través del Registro Civil, asigna el número de cédula de identidad para identificar de manera única a los ciudadanos. Este número consiste en 10 dígitos con la siguiente estructura:
- Los dos primeros números corresponden al número de la provincia donde fue generada la cédula de identidad con el certificado de nacido vivo. En caso de extranjeros, el número es 30. Los únicos valores posibles a la fecha son los siguientes:
01 Azuay 02 Bolivar 03 Cañar 04 Carchi 05 Cotopaxi 06 Chimborazo 07 El Oro 08 Esmeraldas 09 Guayas 10 Imbabura 11 Loja 12 Los Ríos 13 Manabí 14 Morona Santiago 15 Napo 16 Pastaza 17 Pichincha 18 Tungurahua 19 Zamora Chinchipe 20 Galápagos 21 Sucumbíos 22 Orellana 23 Santo Domingo de los Tsáchilas 24 Santa Elena 30 Número reservado para ecuatorianos registrados en el exterior.
- Cabe señalar que el conjunto de valores posibles cambiará conforme varíe la estructura política de las provincias. En este momento es incorrecto contar con un número de doble cero (00) o mayor a 24, excepto 30 que como se dijo se lo utiliza en números asignados para ecuatorianos en consulados del Ecuador en el exterior.
- El tercer número puede tener un valor entre el cero (0) y el cinco (5). Algunos de los valores restantes son usados en el RUC (se lo explica más adelante) y otros nunca se los usa. (favor tomar en cuenta la actualización del 14 de julio de 2017, al final del artículo, donde se revisan los casos de cédulas con tercer dígito 6)
- Del cuarto al noveno dígito es un número secuencial que el Registro Civil lo obtiene de manera automática al momento de generar la cédula de identidad.
- El décimo dígito es el dígito verificador, el cual se lo obtiene a través de un cálculo especial donde se utiliza el módulo 10.
Algoritmo de Verificación
El décimo dígito es el resultado de un cálculo realizado con los anteriores nueve, de la siguiente manera:
- Se agrupan los nueve primeros dígitos en dos conjuntos: los que están en posiciones impares y los que están en pares. Por ejemplo, para la cédula de identidad 1713175071, las posiciones impares serían 1, 1, 1, 5 y 7, mientras que las posiciones pares serían 7, 3, 7 y 0.
- A las posiciones impares se multiplican por dos (2). Si el resultado de esta multiplicación es mayor a nueve, se le resta nueve. Por ejemplo, si los números en posiciones impares son 1, 1, 1, 5 y 7, la multiplicación por dos de cada número sería 2, 2, 2, 10 y 14. Ya que algunos resultados son mayores a nueve, se procede a restar nueve a esos valores, quedando así: 2, 2, 2, 1 y 5.
- Se suman los dígitos en posiciones pares, más los resultados de las operaciones en las posiciones impares. Por ejemplo, si los dígitos pares son 7, 3, 7 y 0, la suma de dígitos en posiciones pares sería 17. Por otro lado, si el resultado de las operaciones en las posiciones impares es 2, 2, 2, 1 y 5, su suma sería 12. El total de la suma sería 17 + 12 = 29
- Se obtiene el módulo 10 de la suma total anterior, es decir, se toma el dígito más a la derecha del resultado de la suma. Por ejemplo, si suma 29, el módulo 10 sería 9.
- Si el resultado anterior es cero entonces el dígito verificador es cero, caso contrario al número 10 se le resta el resultado obtenido en el anterior paso. Por ejemplo, si el resultado del paso anterior es 9, la resta sería 10 – 9 = 1, siendo 1 el dígito verificador calculado.
Como se puede verificar, el resultado en el ejemplo del quinto paso (1) es igual al último dígito de la cédula de identidad de ejemplo que consta en el primer paso (1713175071).
Este algoritmo se lo ha automatizado en el siguiente programa, donde es posible ingresar cualquier cédula de identidad para entender cada paso de su verificación:
Sobre el Registro Único de Contribuyentes (RUC)
El número RUC es el identificador único usado por el Servicio de Rentas Internas para el cobro de impuestos. Este identificador es usado dentro de la estructura del código de autorización de los comprobantes electrónicos del Ecuador, tal y como se lo detalla en este artículo.
Tiene cinco diferencias con el número de cédula:
- Consta de 13 dígitos, en lugar de los 10 de la cédula de identidad. Los últimos dígitos son un secuencial que corresponde al número del establecimiento. El número de dígitos usados para este secuencial dependen del tipo de RUC, que se lo explicará más adelante.
- El tercer dígito puede ser del 0 al 5, o 6, o 9, dependiendo del tipo de RUC (se explicará más adelante cada caso).
- Si para la cédula de identidad el dígito verificador siempre es el décimo, para instituciones públicas es el noveno.
- El dígito verificador se lo calcula con módulo 11 para algunos tipos de RUC y con módulo 10 para otros, en lugar del uso exclusivo del módulo 10 en la cédula de identidad.
- Para el cálculo del dígito verificador, los coeficientes para la multiplicación pueden ser distintas al simple 2 para las posiciones impares que se usa siempre en la cédula de identidad, dependiendo del tipo de RUC.
El Servicio de Rentas Internas cuenta con un documento donde se explica la manera de validar los números de cédula de identidad y RUC. Adicional, el SRI ha publicado en su sitio una explicación de la estructura del RUC.
Tipos de RUC
Existen tres tipos de RUC según el tipo de contribuyente:
- Persona natural: es el mismo número de cédula de identidad de la persona, más el número de sucursal (que por lo general es 001). Ya que no se cambia al número de cédula de identidad, el tercer dígito de este tipo de RUC estará siempre entre cero (0) y cinco (5) (favor tomar en cuenta la actualización del 14 de julio de 2017, al final del artículo, donde se revisan los casos de cédulas de identidad con tercer dígito 6). De igual manera, el dígito verificador se lo calcula con módulo 10, además los coeficientes de multiplicación son 2, 1, 2, 1, 2, 1, 2, 1, 2, es decir es el 2 para las posiciones impares, al igual que en la cédula de identidad.
- Persona jurídica y extranjeros sin cédula de identidad: La estructura de los 10 primeros dígitos es similar al de la cédula de identidad, a excepción del tercer dígito que siempre tendrá el valor fijo de nueve (9). Los tres últimos dígitos son el número de establecimiento (el primer establecimiento es 001). A diferencia de la cédula de identidad, el décimo dígito verificador se lo calcula con módulo 11. Los coeficientes de multiplicación para el cálculo del dígito verificador son 4, 3, 2, 7, 6, 5, 4, 3, 2.
- Institución Pública: Los dos primeros dígitos son el código de la provincia, al igual que en la cédula de identidad. El tercer dígito siempre tendrá el valor fijo de seis (6) (favor tomar en cuenta la actualización del 14 de julio de 2017, al final del artículo, donde se revisan los casos de cédulas de identidad con tercer dígito 6). Del cuarto al octavo dígito es un secuencial. El dígito verificador se lo calcula con módulo 11 y está en la novena posición. Los coeficientes de multiplicación para el cálculo del dígito verificador son 3, 2, 7, 6, 5, 4, 3, 2. El número de establecimiento son los cuatro últimos dígitos (el primer establecimiento es 0001).
Verificación de RUC
Al igual que para el número de cédula de identidad, se automatizó la verificación del RUC para entender su validación.
Puede probar el validador ingresando alguno de los siguientes ejemplos:
- Persona natural: 1713175071001
- RUC de persona jurídica: 1090072923001
- RUC de persona jurídica con residuo cero: 0992114800001
- Institución pública: 1768028470001
- Institución pública con residuo cero: 1260004800001
Ejemplos de Implementaciones de Validadores
A continuación se mostrarán dos ejemplos de implementación del validador de cédula de identidad, en lenguajes distintos.
Validador para hoja de cálculo
El validador de la cédula de identidad para hoja de cálculo es el siguiente:
=SI(Y(ESNUMERO(A3); LARGO(A3)=10; EXTRAEB(A3;1;2)>0; O(EXTRAEB(A3;1;2)+0<25; EXTRAEB(A3;1;2)+0=30)); SI(RESIDUO(1000 - EXTRAEB(A3;1;1)*2 + SI(EXTRAEB(A3;1;1)*2>9;9;0) - EXTRAEB(A3;3;1)*2 + SI(EXTRAEB(A3;3;1)*2>9;9;0) - EXTRAEB(A3;5;1)*2 + SI(EXTRAEB(A3;5;1)*2>9;9;0) - EXTRAEB(A3;7;1)*2 + SI(EXTRAEB(A3;7;1)*2>9;9;0) - EXTRAEB(A3;9;1)*2 + SI(EXTRAEB(A3;9;1)*2>9;9;0) - EXTRAEB(A3;2;1) - EXTRAEB(A3;4;1) - EXTRAEB(A3;6;1) - EXTRAEB(A3;8;1); 10) + 0 = EXTRAEB(A3;10;1) + 0; VERDADERO; FALSO); FALSO)
El mismo algoritmo pero en inglés, por si la hoja de cálculo esté en ese idioma:
=IF(AND(ISNUMBER(A3); LEN(A3)=10; MIDB(A3; 1; 2)>0;OR(MIDB(A3; 1; 2)+0<25;MIDB(A3; 1; 2)+0=30));IF(MOD(1000-MIDB(A3; 1; 1)*2+IF(MIDB(A3; 1; 1)*2>9; 9; 0)-MIDB(A3; 3; 1)*2+IF(MIDB(A3; 3; 1)*2>9; 9; 0)-MIDB(A3; 5; 1)*2+IF(MIDB(A3; 5; 1)*2>9; 9; 0)-MIDB(A3; 7; 1)*2+IF(MIDB(A3; 7; 1)*2>9; 9; 0)-MIDB(A3; 9; 1)*2+IF(MIDB(A3; 9; 1)*2>9; 9; 0)-MIDB(A3; 2; 1)-MIDB(A3; 4; 1)-MIDB(A3; 6; 1)-MIDB(A3; 8; 1); 10)+0=MIDB(A3; 10; 1)+0; TRUE(); FALSE()); FALSE())
La forma de uso es:
- Copiar el código en un blog de notas y cambiar las referencias a la celda A3, a la primera posición de la columna donde se tengan los números de cédula de identidad.
- Luego pegar el texto resultante en una celda contigua a la primera posición, y arrastrar la fórmula a lo largo de la columna hasta el final del listado de cédulas de identidad.
Validador en JavaScript
Para JavaScript, se implementó un validador de cédula de identidad muy sencillo y eficiente, cuyo algoritmo es usado en los ejemplos de este artículo:
function verificarCedula(cedula) {
if (typeof(cedula) == 'string' && cedula.length == 10 && /^\d+$/.test(cedula)) {
var digitos = cedula.split('').map(Number);
var codigo_provincia = digitos[0] * 10 + digitos[1];
//if (codigo_provincia >= 1 && (codigo_provincia <= 24 || codigo_provincia == 30) && digitos[2] < 6) {
if (codigo_provincia >= 1 && (codigo_provincia <= 24 || codigo_provincia == 30)) {
var digito_verificador = digitos.pop();
var digito_calculado = digitos.reduce(
function (valorPrevio, valorActual, indice) {
return valorPrevio - (
valorActual * (2 - indice % 2)) % 9 - (valorActual == 9) * 9;
}, 1000) % 10;
return digito_calculado === digito_verificador;
}
}
return false;
}
Conclusiones y recomendaciones
Es posible realizar una verificación eficiente de la cédula de identidad mediante la comprensión del algoritmo y de los casos especiales. Si requiere algún tipo de personalización o de implementación en otros lenguajes, no dude en contactarnos.
Actualización al 14 de julio de 2017
Gracias a nuestros lectores se detectaron varios casos de cédulas de identidad válidas cuyo tercer dígito es 6. Por ejemplo, nuestro lector Vinicio nos da el caso concreto del número de cédula 0960075455. Se realizó la consulta a dos funcionarios del Registro Civil, quienes concuerdan que la restricción del tercer dígito no consta en ningún instructivo, reglamento o ley de su Institución. Indicaron que esta restricción del tercer dígito no debería ser tomado en cuenta en los algoritmos de verificación, y que el único mecanismo de validación formalmente aceptado es el dígito verificador. También supieron manifestar que si el SRI ha implantado esta restricción para los números RUC (donde el tercer dígito 6 teóricamente es exclusivo para instituciones públicas), no lo ha hecho de manera coordinada con el Registro Civil y es de su exclusiva responsabilidad (problema típico de la ausencia de gestión de interesados en un proyecto). Además, el Reglamento a la Ley del Registro Único de Contribuyentes, en su artículo 3 sobre la estructura del número de registro, no menciona al tercer dígito.
Las implicaciones que se saca de todo esto son al menos dos:
- En el Ecuador no existe una especificación formal de la estructura de la cédula de identidad por parte del Registro Civil donde se detallen estos conceptos, por lo que se recomienda no usar el tercer dígito de la cédula de identidad en algoritmos de verificación.
- Ya que se han identificado casos reales de números de cédula de identidad con el tercer dígito 6, pueden existir casos de números de RUC de esas personas naturales con el tercer dígito 6 que no corresponden a instituciones públicas, por lo que no se puede confiar en el tercer dígito del RUC para discernir el tipo de contribuyente. Esto abre un gran problema para la verificación, puesto que como se detalló en el artículo, el dígito verificador para personas naturales es el décimo, mientras que para instituciones públicas es el noveno. En esos casos no hay manera definitiva de realizar la validación del RUC. Se requerirá de un dato externo al RUC para saber el tipo de contribuyente, y de esta manera poder aplicar uno u otro algoritmo de verificación.
A todo esto, si se añade el hecho del aparecimiento repentino del código 30 en los dos primeros dígitos para indicar cedulación en el extranjero, la recomendación para implementar validaciones que no dejen de funcionar en el tiempo sería utilizar solamente el dígito verificador. En lo posible.
Muy buen aporte amigo…!!!
Para validar el RUC es un tanto complicado; porque se requiere de rantos div para solamente decir si es válido o no; otra pregunta no puede enviar un alert para esto.
Esta implementación de la validación puede ser modificada libremente, para hacerla tan simple como se la necesite.
En la empresa donde trabajo no he podido sacar el salvo conducto porque cuando ingreso el numero de identificación el sistema automáticamente dice que el tercer número debe ser igual a cero o menor a seis y como el tercer número de mi identificación es 6 no me han logrado sacar el salvo conducto que debo hacer en este caso
Trate de buscar ayuda en los teléfonos de la AMT o escriba por twitter al alcalde explicando brevemente su caso y pidiendo ayuda.
Eso que le han dicho no es cierto y va en contra de lo que define el Registro Civil para una cédula válida, en donde lo único que se valida es el décimo dígito verificador. No existe ley, reglamento, manual técnico, ni nada que fije alguna restricción a la cédula aparte del dígito verificador, por lo que puede llamar directo a la Secretaría De Movilidad o a la Agencia Metropolitana de Tránsito* para que le atiendan, ya que están vulnerando sus derechos por ignorancia.
* https://www.gob.ec/gaddmq/tramites/emision-salvoconductos
Contacto: Coordinación de Servicios Ciudadanos
Email: denuncias.amt@quito.gob.ec
Teléfono: (02) 3-952-300 ext. 28558
¿Estimados y para cédulas de extranjeros? hay no sirve este algoritmo
Gracias por la observación, se ha actualizado el artículo para contemplar ese caso. Saludos.
0960075455 es cedula correcta verificado en la pagina del Registro Civil, el tercer digito No es menor a 6, el algoritmo me falla, por favor su ayuda!
Gracias por reportar la novedad, pues tienes razón, va en contra de toda la información disponible en Internet que hemos podido consultar. A través de su sitio Web hemos contactado con el Registro Civil para que puedan dar una versión oficial sobre el tema, y en cuanto tengamos su respuesta actualizaremos este artículo al respecto. Saludos
Estimado, existe un caso donde un extranjero obtuvo una cédula ecuatoriana, entonces allí no funciona el algoritmo porque el tercer dígito es un 6 y obviamente es una cédula válida para el registro civil.
Estimado, gracias por reportar ese caso. Estamos realizando averiguaciones en el Registro Civil para aclarar este tema, ya que lo que mencionas no consta en ninguna documentación que se haya podido acceder, es más va en contra de lo consultado. En cuanto podamos esclarecer este tema con el Registro Civil actualizaremos el artículo acorde. Saludos.
Esto me respondieron del registro civil. «Lo números de cédula son correctos, se recomienda que en la validación de los mismos se lo realice en base al algoritmo del dígito verificador debido a que si dicho algoritmo en la tercera posición realiza alguna comparación le va a indicar que la cédula es inválida, razón por la cual se recomienda que esta validación se la realice en base al dígito verificador»
Gracias por el aporte. Por el momento no quedaría otra opción ya que la especificación del número del RUC que consta en el sitio web del SRI no es compatible con cédulas con tercer dígito 6, incluso la posición del dígito verificador cambia ya que no es el décimo dígito sino el noveno, como se ve en el artículo. Se está consultando en el Registro Civil por una definición oficial de la estructura del número de cédula, en cuanto se tengan esos datos se ajustará el artículo acorde. Saludos.
Gracias, ¿en java tienen este algoritmo?
Puedes encontrar varias implementaciones de este algoritmo sobre Java en el Internet, por ejemplo en este video. Saludos.
0961114162001 este ruc no pasa la validación es ruc de persona natural, de cédula de identidad extranjera, dicho ruc fué tomado de la base de datos del sri y corroborado con Cédula de Identidad.
Ese número RUC es válido, y presenta el problema de los RUC con tercer dígito 6. Favor revisar el artículo para más detalles del problema.
No se han puesto de acuerdo el registro civil (manejo de cédula de personas naturales, 10 dígitos) con el SRI servicio de rentas internas (manejo de RUC registro único de contribuyentes con 13 dígitos para personas jurídicas y a las personas naturales se les añade 001 a la cédula para obtener su RUC).
El SRI respeta el tercer dígito 6 para identificar a las entidades del sector público, pero el registro civil no restringe el tercer dígito y hasta los casos visto usa el 6 para extranjeros que obtienen la cédula, y el SRI le añade el 001, pienso que el SRI debería asignarle otro número.
Para los que quieran validar si el RUC existe pueden entrara a:
https://declaraciones.sri.gob.ec/sri-en-linea/#/SriRucWeb/ConsultaRuc/Consultas/consultaRuc
Esto me crea un problema, ya que hasta ahora identificaba a los RUC del sector público con el tercer dígito 6.
Así es, en la actualidad la única forma 100% segura de validar el RUC es simplemente contar que tenga 13 dígitos.
En el link que les di (https://declaraciones.sri.gob.ec/sri-en-linea/#/SriRucWeb/ConsultaRuc/Consultas/consultaRuc), al responder la consulta devuelve algunos campos, entre ellos el tipo contribuyente, en el cual podemos ver que se trata de una persona natural o una sociedad.
Para el RUC 0960571719001(DORIA CAIZEDO LUIS JORGE extranjero representante de la compañía INTEDYA GUAYAQUIL METROPOLITANA, el registro civil le asignó el 6 y el SRI le añadió 001) vemos que devuelve persona natural, con lo cual ya puedo descartar que se trate de una entidad del sector público.
Para el RUC 1768188830001 vemos que es una sociedad (AGENCIA DE REGULACIÓN Y CONTROL FITO Y ZOOSANITARIO) por lo tanto se cumple el logaritmo del SRI.
¿Se puede hacer una consulta masiva al sitio para obtener el campo tipo contribuyente?
No he encontrado manera de consultar el tipo de contribuyente de manera automática. Sin embargo, en caso de existir forma, se reducirían bastante los casos en los que se podría aplicar la validación, ya que se necesitaría previamente consultar online el tipo de contribuyente, o en su defecto ya contar con ese dato de manera local (offline). En cualquier caso, el solo dato del RUC no es suficiente para la validación.
Tal vez una solución salomónica (y el mal menor por el momento) es: si el tercer dígito es 6, validar tanto RUC de persona natural (dígito 10 de verificación) como RUC de institución pública (dígito 9 de verificación), y si cualquiera de ambas validaciones pasa entonces dar el RUC como válido. Esta solución tiene una pequeña probabilidad de falsos positivos (por ejemplo, una institución pública cuyo 9no. dígito de verificación no coincida pero que por coincidencia el 10mo. dígito sí, o viceversa, una persona natural cuyo 10mo. dígito de verificación no coincida pero que por coincidencia el 9no. dígito sí).
La verificación de mi RUC no le valida es este es correcto
Por lo que el algoritmo no esta bien
RUC 1706738570001 persona natural
No hay forma totalmente confiable de validar el RUC, más referencias en las conclusiones del artículo.
Buen aporte, sin embargo el algoritmo no esta incluyendo las cedulas 30 que si las comentas
Gracias por la indicación, tomar en cuenta la observación del mismo artículo que señala que la única manera aceptada por el Registro Civil de verificar la validez de un número de cédula es con el cálculo del dígito verificador.
Disculpe se que es un tema de hace mucho tiempo pero viendo en el SRI dice que cuando es RUC y el tercer digito es 6 siempre el decimo digito sera cero, la pregunta seria si en el caso de cedula si el tercer digito es 6 hay la posibilidad de que el decimo digito sera cero.
Lo del SRI no se basa en nada, por lo que no hay impedimento en que pueda suceder ese caso.
Me sirvió de mucha ayuda con un ejercicio que me dejaron de tarea gracias de verdad.
la cédula 1308845260 es válida pero el ruc 1308845260001 no