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
Copy Markdown

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