Skip to content

Instantly share code, notes, and snippets.

@AngelAlexQC
Created October 2, 2021 19:23
Show Gist options
  • Save AngelAlexQC/264ddcf07ff5b5548c9b4114efe43950 to your computer and use it in GitHub Desktop.
Save AngelAlexQC/264ddcf07ff5b5548c9b4114efe43950 to your computer and use it in GitHub Desktop.
Validar Cédulas en Ecuador (Error First).
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