Skip to content

Instantly share code, notes, and snippets.

@leon486
Last active July 21, 2023 13:06
Show Gist options
  • Select an option

  • Save leon486/083cbffd137c02a58607f9de8565bf36 to your computer and use it in GitHub Desktop.

Select an option

Save leon486/083cbffd137c02a58607f9de8565bf36 to your computer and use it in GitHub Desktop.
Código para validar las cédulas dominicanas en Python y Javascript
//
// Validación de la cédula dominicana en Javascript por Leonardo Matos
//
function validar_cedula(cedula){
if (typeof cedula !="string") return false
//cleanup
cedula = cedula.replace(/-/g, "");
// La cédula debe tener 11 dígitos
if (cedula.length != 11) return false
// Validar serie
if (parseInt(cedula.substring(0, 3)) != 402 && parseInt(cedula.substring(0, 3)) > 121 && parseInt(cedula.substring(0, 3)) < 1) return false
var suma = 0
var verificador = 0
for (var i = 0; i < cedula.length; i++){
let n = cedula.charAt(i);
//No ejecutar el ultimo digito
if( i == (cedula.length)-1) break;
// Los dígitos pares valen 2 y los impares 1
let multiplicador = (parseInt(i) % 2) == 0 ? 1 : 2;
// Se multiplica cada dígito por su paridad
let digito = parseInt(n)*parseInt(multiplicador)
// Si la multiplicación da de dos dígitos, se suman entre sí
digito = digito>9 ? [...digito.toString()].map(e=>parseInt(e)).reduce((a,b)=>a+b) : digito;
// Se va haciendo la acumulación de esa suma
suma = suma + digito
}
// Al final se obtiene el verificador con la siguiente fórmula
verificador = (10 - (suma % 10) ) % 10
// Se comprueba el verificador
return (verificador == parseInt(cedula.slice(-1)))
}
console.assert(validar_cedula("402-1235844-0") == true, {cedula: "402-1235844-0", errorMsg: "Debe aceptar cédulas con guiones"});
console.assert(validar_cedula("00111956884") == true, {cedula: "00111956884", errorMsg: "Debe validar esta cédula"});
console.assert(validar_cedula("40285574493") == true, {cedula: "40285574493", errorMsg: "Debe validar esta cédula"});
console.assert(validar_cedula("402855744931") == false, {cedula: "402855744931", errorMsg: "No debe validar cédulas con más de 11 caracteres"});
console.assert(validar_cedula("001") == false, {cedula: "001", errorMsg: "No debe validar cédulas con menos de 11 caracteres"});
console.assert(validar_cedula("00145578877") == false, {cedula: "00145578877", errorMsg: "No debe validar esta cédula"});
console.assert(validar_cedula(00145578877) == false, {cedula: 00145578877, errorMsg: "No debe validar cedulas en formato int"});
"""
Validación de la cédula dominicana en Mejorado por Leonardo Matos
Fork de: Freddy Rondon (https://gist.github.com/Freddyerf/2f3adfbf9450b4128320b93881237cdb)
"""
def validar_cedula(cedula):
#cleanup
cedula = cedula.replace('-','')
# La cédula debe tener 11 dígitos
if len(cedula)!= 11:
return False
if (int(cedula[0:3]) != 402 and int(cedula[0:3]) > 121 and int(cedula[0:3]) < 1):
return False
suma = 0
verificador = 0
for i, n in enumerate(cedula):
#No ejecutar el ultimo digito
if( i == len(cedula)-1):
break
# Los dígitos pares valen 2 y los impares 1
multiplicador = 1 if (int(i) % 2) == 0 else 2
# Se multiplica cada dígito por su paridad
digito = int(n)*int(multiplicador)
# Si la multiplicación da de dos dígitos, se suman entre sí
digito = digito//10 + digito%10 if(digito>9) else digito
# Y se va haciendo la acumulación de esa suma
suma = suma + digito
# Al final se obtiene el verificador con la siguiente fórmula
verificador = (10 - (suma % 10) ) % 10
# Se comprueba el verificador
return (verificador == int(cedula[-1:]))
###########
assert (validar_cedula("402-1235844-0") == True)
assert (validar_cedula("00111956884") == True)
assert (validar_cedula("40285574493") == True)
assert (validar_cedula("402855744931") == False)
assert (validar_cedula("001") == False)
assert (validar_cedula("00145578877") == False)
@yvngd88
Copy link

yvngd88 commented Apr 17, 2023

dame tu telegram

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment