Skip to content

Instantly share code, notes, and snippets.

@ViCMAP
Last active March 8, 2024 03:00
Show Gist options
  • Save ViCMAP/55260ffd138fe150040d to your computer and use it in GitHub Desktop.
Save ViCMAP/55260ffd138fe150040d to your computer and use it in GitHub Desktop.
Validación de cédula dominicana (Javascript)
<script>
/* Modificacion del original en postingcode.com
* Agregado el control de variable cedulaValida y controlando ced.length a menor de 11
* para los casos de cédulas sin guiones
*
* La cedula utilizada ES una cedula valida y asignada al ciudadano gerente de este script
* Modificación por Victor Abreu | www.vicabreu.com
* Nombre del archivo: ValidaCedulaDominicana.html
*/
var cedulaValida = "00116454281";
var cedulaNoValida = "00116454282";
alert ("Cedula " + cedulaValida + ": " + valida_cedula(cedulaValida));
alert ("Cedula " + cedulaValida + ": " + valida_cedula(cedulaNoValida));
/* Validación de número de cédula dominicana
* con longitud de 11 caracteres numéricos o 13 caracteres incluyendo los dos guiones de presentación
* ejemplo sin guiones 00116454281, ejemplo con guiones 001-1645428-1
* el retorno es 1 para el caso de cédula válida y 0 para la no válida
*/
function valida_cedula(ced) {
var c = ced.replace(/-/g,'');
var cedula = c.substr(0, c.length - 1);
var verificador = c.substr(c.length - 1, 1);
var suma = 0;
var cedulaValida = 0;
if(ced.length < 11) { return false; }
for (i=0; i < cedula.length; i++) {
mod = "";
if((i % 2) == 0){mod = 1} else {mod = 2}
res = cedula.substr(i,1) * mod;
if (res > 9) {
res = res.toString();
uno = res.substr(0,1);
dos = res.substr(1,1);
res = eval(uno) + eval(dos);
}
suma += eval(res);
}
el_numero = (10 - (suma % 10)) % 10;
if (el_numero == verificador && cedula.substr(0,3) != "000") {
cedulaValida = 1;
}
else {
cedulaValida = 0;
}
return cedulaValida;
}
</script>
@aneudyp
Copy link

aneudyp commented Aug 22, 2018

Excelente!!

@esmarlint
Copy link

Excelente aporte.

@eliezerhilario
Copy link

Muchas gracias

@manutepowa
Copy link

Excelente aporte. Misma función en PHP

function valida_cedula($ced) {
	$c = str_replace('-', '', $ced);
	$cedula = substr($c, 0, -1);
	$verificador = substr($c, -1);
	$suma = 0;
	$cedulaValida = 0;
	
	//Si no cumple el tamaño FALSE
	if(strlen($ced) < 11) { return false; }

	for ($i = 0; $i < strlen($cedula); $i++) {
	    $mod = (($i % 2) == 0) ? 1 : 2;
	    $res = substr($cedula, $i, 1) * $mod;

		if ($res > 9) { 
			$res = strval($res);  
			$uno = substr($res, 0, 1);  
			$dos = substr($res, 1, 1);  
			$res = (int)$uno + (int)$dos; 
		}

		$suma += (int)$res; 
	}

	$el_numero = (10 - ($suma % 10)) % 10;
	if ($el_numero == $verificador && substr($cedula, 0, 3) != "000") {  
		$cedulaValida = TRUE;
	}else{
		$cedulaValida = FALSE;
	}

	return $cedulaValida;
}

@jhonatanfdez
Copy link

jhonatanfdez commented Jun 1, 2020

Excelente aporte.
hice una pequeña modificación para que si la cédula es incorrecta y retorna 0, que mejor retorne false, para luego poder hacer una validación con toastr al final


<script>
function valida_cedula(ced) {  
	    var c = ced.replace(/-/g,'');  
	    var cedula = c.substr(0, c.length - 1);  
	    var verificador = c.substr(c.length - 1, 1);  
	    var suma = 0;  
		var cedulaValida = 0;
	    if(ced.length < 11) { return false; }  
	    for (i=0; i < cedula.length; i++) {  
	        mod = "";  
	         if((i % 2) == 0){mod = 1} else {mod = 2}  
	         res = cedula.substr(i,1) * mod;  
	         if (res > 9) {  
	              res = res.toString();  
	              uno = res.substr(0,1);  
	              dos = res.substr(1,1);  
	              res = eval(uno) + eval(dos);  
	         }  
	         suma += eval(res);  
	    }  
	    el_numero = (10 - (suma % 10)) % 10;  
	    if (el_numero == verificador && cedula.substr(0,3) != "000") {  
	      cedulaValida = 1;
	    }  
	    else   {  
	     cedulaValida = false;
	    }  
		return cedulaValida;
	}


	/* crea un input de tipo text y agrega una clase llamada cedula y si la cédula retorna false, con toastr un mensaje */
	$('.cedula').blur(function() {
		
		var validacion = valida_cedula(this.value);
		console.log('cedula ',this.value, validacion)
		if (validacion===false){
			toastr.error('La cédula está no es correcta');
			$(this).focus();
		}
	});
	
</script>

@ViCMAP
Copy link
Author

ViCMAP commented Jun 1, 2020

Excelente aporte.
hice una pequeña modificación para que si la cédula es incorrecta y retorna 0, que mejor retorne false, para luego poder hacer una validación con toastr al final


function valida_cedula(ced) {
var c = ced.replace(/-/g,'');
var cedula = c.substr(0, c.length - 1);
var verificador = c.substr(c.length - 1, 1);
var suma = 0;
var cedulaValida = 0;
if(ced.length < 11) { return false; }
for (i=0; i < cedula.length; i++) {
mod = "";
if((i % 2) == 0){mod = 1} else {mod = 2}
res = cedula.substr(i,1) * mod;
if (res > 9) {
res = res.toString();
uno = res.substr(0,1);
dos = res.substr(1,1);
res = eval(uno) + eval(dos);
}
suma += eval(res);
}
el_numero = (10 - (suma % 10)) % 10;
if (el_numero == verificador && cedula.substr(0,3) != "000") {
cedulaValida = 1;
}
else {
cedulaValida = false;
}
return cedulaValida;
}

/* crea un input de tipo text y agrega una clase llamada cedula y si la cédula retorna false, con toastr un mensaje */
$('.cedula').blur(function() {

  var validacion = valida_cedula(this.value);
  console.log('cedula ',this.value, validacion)
  if (validacion===false){
  	toastr.error('La cédula está no es correcta');
  	$(this).focus();
  }

});

Muchas gracias. :)

@jhonatanfdez
Copy link

Gracias a ti.

@armpxd
Copy link

armpxd commented Nov 3, 2020

Excelente aporte, dejare el mismo codigo pero en c#

public static bool validar_cedula ( string ced)
{
var c = ced.Replace("-","");
var cedula = c.Substring(0, c.Length - 1);
var verificador = int.Parse(c.Substring(c.Length -1,1));
var suma = 0;
var cedulaValida = false;

        if(ced.Length < 11){ return cedulaValida; }

        for (int i= 0; i < cedula.Length; i++) {  
        var mod = 0;  
         if((i % 2) == 0){ mod = 1; } else { mod = 2; }  

         var res = int.Parse(cedula.Substring(i,1)) * mod;  
         if (res > 9) {  
              var resString = res.ToString();  
              var uno = resString.Substring(0,1);  
              var dos = resString.Substring(1,1);  
              res = int.Parse(uno) + int.Parse(dos);  
         }  
         suma += res;  
    } 
    var el_numero = (10 - (suma % 10)) % 10;  
    if (el_numero == verificador && cedula.Substring(0,3) != "000") {  
      cedulaValida = true;
    }  
    else   {  
     cedulaValida = false;
    }  

        return cedulaValida;
    }

@20010420
Copy link

He pasado el código para JAVA pero tiene un error de de valores si alguien lo logra solucionar le estaré sumamente agradecido

public boolean Validar_cedula(String ced) {
String c = ced.replace("-", "");
String cedula;
cedula = c.substring(0, 1 - c.length());
int verificador = Integer.parseInt(c.substring(c.length() - 1, 1)); //Aqui esta el error
int suma = 0;
boolean cedulaValida = false;

    if (ced.length() < 11) {
        return cedulaValida;
    }

    for (int i = 0; i < cedula.length(); i++) {
        int mod = 0;
        if ((i % 2) == 0) {
            mod = 1;
        } else {
            mod = 2;
        }
        int res = Integer.parseInt(cedula.substring(i, 1)) * mod;
        if (res > 9) {
            String resString = String.valueOf(res);
            String uno = resString.substring(0, 1);
            String dos = resString.substring(1, 1);
            res = Integer.parseInt(uno) + Integer.parseInt(dos);  
     }  
     suma += res;
    }
    int el_numero = (10 - (suma % 10)) % 10;
    if (el_numero == verificador && cedula.substring(0, 3)!= "000") {
        cedulaValida = true;
    } else {
        cedulaValida = false;
    }
    return cedulaValida;
}

@20010420
Copy link

No es mío pero aquí esta en código de JAVA:

public static boolean validarCedula(String cedula) { //Funciona

    int suma = 0;

    final char[] peso = {'1', '2', '1', '2', '1', '2', '1', '2', '1', '2'};

// Comprobaciones iniciales
    if ((cedula == null) || (cedula.length() != 11)) {
        return false;
    }

// Si no es un nº => la descartamos  
    try {
        Long.parseLong(cedula);
    } catch (Exception e) {
        return false;
    }

    for (int i = 0; i < 10; i++) {

        int a = Character.getNumericValue(cedula.charAt(i));

        int b = Character.getNumericValue(peso[i]);

        char[] mult = Integer.toString(a * b).toCharArray();

        if (mult.length > 1) {
            a = Character.getNumericValue(mult[0]);
            b = Character.getNumericValue(mult[1]);
        } else {
            a = 0;
            b = Character.getNumericValue(mult[0]);
        }

        suma = suma + a + b;
    }

    int digito = (10 - (suma % 10)) % 10;

    // Comprobamos que el dígito de control coincide    
    if (digito != Character.getNumericValue(cedula.charAt(10))) {
        return false;
    }

    return true;
}

@RickzDO
Copy link

RickzDO commented Mar 8, 2024

// Función para validar la cédula
function validarCedula(ced) {
// Eliminar guiones para obtener solo los números
var c = ced.replace(/-/g,'');

// Extraer el número de cédula sin el dígito verificador
var cedula = c.substr(0, c.length - 1);  

// Obtener el dígito verificador
var verificador = c.substr(c.length - 1, 1);  

// Inicializar la suma que se utilizará en el algoritmo
var suma = 0;  

// Variable para almacenar la validez de la cédula (0 para no válida, 1 para válida)
var cedulaValida = 0;

// Verificar que la cédula tenga al menos 11 caracteres
if(ced.length < 11) { 
    return false; 
}  

// Iterar sobre cada dígito de la cédula
for (i=0; i < cedula.length; i++) {  
    // Determinar el factor multiplicador (1 para posición par, 2 para posición impar)
    mod = "";  
    if((i % 2) == 0){ 
        mod = 1; 
    } else { 
        mod = 2; 
    }  

    // Multiplicar el dígito por el factor
    res = cedula.substr(i,1) * mod;  

    // Si el resultado es mayor a 9, sumar los dígitos individuales
    if (res > 9) {  
        res = res.toString();  
        uno = res.substr(0,1);  
        dos = res.substr(1,1);  
        res = eval(uno) + eval(dos);  
    }  

    // Acumular la suma
    suma += eval(res);  
}  

// Calcular el número que se debe agregar para llegar al siguiente múltiplo de 10
el_numero = (10 - (suma % 10)) % 10;  

// Verificar si el número calculado coincide con el dígito verificador y que los primeros tres dígitos no sean "000"
if (el_numero == verificador && cedula.substr(0,3) != "000") {  
    cedulaValida = 1;
}  
else   {  
    cedulaValida = 0;
}  

// Retornar la validez de la cédula
return cedulaValida;

}

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