Validar números de Cédulas de Nicaragua con JavaScript y Java

Les comparto algo interesante sobre como validar los números de cédulas nicaraguenses, gracias a mi buen amigo Denis Torres, que lo ha puesto en la libertad de usarlo, modificarlo, copiarlo o compartirlo (L-GPL3).


Publicado: Editado: Estado:

Como validar Cédulas Nicaragüenses compartido por Denis Torres autor de este código, actualizado el 10 de agosto del 2013. Para descargar en una versión JavaScript ( Descargar). Si eres programador Java puedes utilizar este ( Descargar).

En la parte visual:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head>  
  <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type" />  
  <title>Nicaragua</title>
  <script language="JavaScript" src="cedula.js" type="text/javascript"></script>  
  <script language="JavaScript" type="text/javascript">
  function isCedulaValida(txtcedula){
   var cedula = new ValidarCedula();
   
   cedula.setCedula(txtcedula.value);

   tempo = "Cédula a Validar: " + cedula.getCedula() + "\n";
   tempo+= "Prefijo Cédula a Validar: " + cedula.getPrefijoCedula()+ "\n";
   tempo+= "Fecha Cédula a Validar: " + cedula.getFechaCedula()+ "\n";
   tempo+= "Sufijo Cédula a Validar: " + cedula.getSufijoCedula()+ "\n";
   tempo+= "Letra Cédula a Validar: " + cedula.getLetraCedula()+ "\n";
   tempo+= "¿Es Cédula Válida?: " + (cedula.isCedulaValida()?"SI":"NO")+ "\n";
   tempo+= "¿Es Prefijo Válido?: " + (cedula.isPrefijoValido()?"SI":"NO")+ "\n";
   tempo+= "¿Es Fecha Válida?: " + (cedula.isFechaValida()?"SI":"NO")+ "\n";
   tempo+= "¿Es Sufijo Válido?: " + (cedula.isSufijoValido()?"SI":"NO")+ "\n";
   tempo+= "¿Es Letra Válida?: " + (cedula.isLetraValida()?"SI":"NO")+ "\n";

   alert(tempo);
  }
  </script>
 </head>
 <body>
  <table style="text-align: left;" border="1" cellpadding="2" cellspacing="2">
   <tbody>
   <tr align="center">
    <td colspan="2" rowspan="1">Validar C&eacute;dula Nicaragua</td>
   </tr>
   <tr>
    <td>C&eacute;dula Nicaragua</td>
    <td><input name="cedula" id="cedula" /></td>
   </tr>
   <tr>
    <td><br />
    </td>
    <td><input onclick="[removed]isCedulaValida(document.getElementById('cedula'));" name="validar" value="validar" type="button" /><br />
    </td>
   </tr>  
   </tbody>
  </table>
  <br />
 </body>
</html>

Las funciones para validar:

/*
 *  Validador de Número de Cédula Nicaraguense
 *  
 *  Copyright (C) 2008 Denis Torres Guadamuz <denisjtorresg@gmail.com>
 *  
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *  
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *  
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

String.prototype.replaceAll=function(s1, s2) {return this.split(s1).join(s2)}
String.prototype.ltrim=function() {return this.replace(/^s+/, "");}
String.prototype.rtrim=function() {return this.replace(/s+$/, "");}
String.prototype.trim=function() {return this.rtrim(this.ltrim(this));}

/**
 * <p>Validador de Número de Cédula Nicaraguense</p>
 * <p>Este programa es software libre: usted lo puede redistribuir y/o modificar
 * bajo los términos de la GPL version 3</p>
 * @autor: denisjtorresg@gmail.com
 * @version: 03/03/2008
 */
function ValidarCedula(){
    this.LETRAS = "ABCDEFGHJKLMNPQRSTUVWXY";
    this.cedula = null;
 
    /**
     * Fiajr el Número de Cédula
     * 
     * @param cedula Número de Cédula con o sin guiones
     */
    this.setCedula =  function(cedula) {
        this.cedula = cedula.trim().replaceAll("-","");
  
        if(this.cedula == null || this.cedula.length != 14)
            this.cedula = null;
        else
        this.cedula = this.cedula.toUpperCase();
    }
 
    /**
     * Retorna true si la cédula es válida
     * false en caso contrario
     * 
     * @return
     */
    this.isCedulaValida = function() {
        if(!this.isPrefijoValido())
            return false;
            
        if(!this.isFechaValida())
            return false;
            
        if(!this.isSufijoValido())
            return false;
        
        if(!this.isLetraValida())
            return false;
            
        return true;
    }
 
    /**
     * Retorna true si el prefijo de la cédula es válida
     * false en caso contrario
     * 
     * @return
     */
    this.isPrefijoValido = function() {
        var prefijo = this.getPrefijoCedula();
        
        if(prefijo==null) return false;
        
 var re = new RegExp("^[0-9]{3}$");
 if (prefijo.search(re) == -1)
            return false;
   
        return true;
    }
 
    /**
     * Retorna true si la fecha de la cédula es válida
     * false en caso contrario
     * 
     * @return
     */
    this.isFechaValida = function() {
        var fecha = this.getFechaCedula();
        
        if(fecha == null) return false;
        
 var re = new RegExp("^(0[1-9]|[12][0-9]|3[01])(0[1-9]|1[012])([0-9]{2})$");
 if (fecha.search(re) == -1)
        return false;
            
        return true;
    }
 
    /**
     * Retorna true si el sufijo de la cédula es válida
     * false en caso contrario
     * 
     * @return
     */
    this.isSufijoValido = function() {
        var sufijo = this.getSufijoCedula();
        
        if(sufijo == null) return false;
        
 var re = new RegExp("^[0-9]{4}[A-Y]$");
 if (sufijo.search(re) == -1)
        return false;
        
        return true;
    }
 
    /**
     * Retorna true si la letra de la cédula es válida
     * false en caso contrario
     * 
     * @return
     */
    this.isLetraValida = function() {
        var letraValida = null;
        var letra = this.getLetraCedula();
        
        if(letra == null) return false;
        
        letraValida = this.calcularLetra();
        
        return (letraValida == letra);
 }
 
    /**
     * Retorna un entero que representa la posición en la cadena LETRAS 
     * de la letra final de una cédula
     * 
     * @return
     */
    this.getPosicionLetra = function() {
        var posicionLetra = 0;
        var cedulaSinLetra = this.getCedulaSinLetra();
        var numeroSinLetra = 0;
        
        if(cedulaSinLetra == null) return -1;
        
        numeroSinLetra =  cedulaSinLetra;
                
        posicionLetra = (numeroSinLetra - Math.floor(numeroSinLetra/23.0) * 23);
        
        return posicionLetra;
    }
    
    /**
     * <p>
     * Calcular la letra al final de la cédula nicaraguense.
     * </p><p>
     * Basado en el trabajo de: Arnoldo Suarez Bonilla - arsubo@yahoo.es
     * </p><p>
     * La letra se calcula con el siguiente algoritmo (yo se los envío en SQL).
     * <p>
     * <pre>
     * declare  @cedula      varchar(20),
     *          &#64;val         numeric(13, 0),
     *          &#64;letra       char(1),
     *          &#64;Letras      varchar(20)
     *          
     *          select @Letras = 'ABCDEFGHJKLMNPQRSTUVWXY'
     *          select @cedula = '0012510750012' --PARTE NUMERICA DE LA CEDULA SIN GUIONES
     *          --CALCULO DE LA LETRA DE LA CEDULA   
     *          select @val = convert(numeric(13, 0), @cedula) - floor(convert(numeric(13, 0), @cedula) / 23) * 23
     *          select @letra = SUBSTRING(@Letras, @val + 1, 1)
     *          select @letra
     * </pre> 
     * @return Letra válida de cédula dada
     */
    this.calcularLetra = function() {
        var posicionLetra = this.getPosicionLetra();
        
        if(posicionLetra <0 || posicionLetra >= this.LETRAS.length)
            return '?';
            
        return this.LETRAS.charAt(posicionLetra);
    }

    /**
     * Retorna el Número de Cédula
     * @return 
     */ 
    this.getCedula = function() {
        return this.cedula;
    }
 
    /**
     * Retorna el prefijo de la cédula
     * @return
     */
    this.getPrefijoCedula = function() {
        if(this.cedula!=null)
            return this.cedula.substring(0,3);
        else 
            return null;
    }
    
    /**
     * Retorna la fecha en la cédula
     * @return
     */
    this.getFechaCedula = function() {
        if(this.cedula!=null)
            return this.cedula.substring(3,9);
        else 
            return null;
    }
    
    /**
     * Retorna el sufijo en la cédula
     * @return
     */
    this.getSufijoCedula = function() {
        if(this.cedula!=null)
            return this.cedula.substring(9,14);
        else 
            return null;
    }
    
    /**
     * Retorna la letra de la cédula
     * @return
     */
    this.getLetraCedula = function() {
        if(this.cedula!=null)
            return this.cedula.substring(13,14);
        else 
            return null;
    }
 
    /**
     * Retorna la cédula sin la letra de validación
     * @return
     */
    this.getCedulaSinLetra = function() {
        if(this.cedula!=null)
            return this.cedula.substring(0,13);
        else 
            return null;
    }
}

 

Bibliografía
  1. http://blog.denisjtorresg.info/2008/02/validar-nmeros-de-cdulas-continuacin.html
Dar puntos de agradecimiento
Reportar esta publicación

Déjanos tu comentario

Comentarios

mariogarcia

(Administrador)

Intereses

música, diseño, programación, electrónica, historia, geografía

Puntos: 146 Votos: 113