Created
October 2, 2021 19:23
-
-
Save AngelAlexQC/264ddcf07ff5b5548c9b4114efe43950 to your computer and use it in GitHub Desktop.
Validar Cédulas en Ecuador (Error First).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
export function cedulaValida(cedula: string): boolean { | |
if (cedula.length != 10) return false; | |
// Digitos de provincia (2 primeros) | |
const digitos_provincia = cedula.substring(0, 2); | |
// Deben estar entre 1 y 24. | |
if (parseInt(digitos_provincia) < 1 || parseInt(digitos_provincia) > 24) | |
return false; | |
// Coeficientes de validación (en posiciones pares) | |
const coeficientes = [2, 1, 2, 1, 2, 1, 2, 1, 2]; | |
// Obtener la suma de multiplicar los dígitos por su respectivo coeficiente, si el resultado es mayor que 9, se resta 9. | |
const suma = coeficientes | |
.map((coeficiente, index) => { | |
const digito = parseInt(cedula.charAt(index)); | |
const result = digito * coeficiente; | |
return result > 9 ? result - 9 : result; | |
}) | |
.reduce((acumulador, digito) => acumulador + digito); | |
// Restamos el resultado de la suma de la decena inmediata superior. | |
const decena = Math.ceil(suma / 10) * 10; | |
const resultado = decena - suma; | |
// Si el resultado es 10, el dígito es cero. | |
const digito = resultado == 10 ? 0 : resultado; | |
// Si el dígito es igual al último dígito de la cédula, la cédula es válida. | |
return digito == parseInt(cedula.charAt(9)); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment