22 de febrero de 2013

Método Para Validar Cédula Dominicana en C#

En días pasado el profesor del Diplomado en Administración y Programación de Bases de Datos Oracle  nos asignó una práctica. La misma consistía en realizar un programa que valide el documento de identidad de la República Dominicana (cédula dominicana).

Tomando en cuenta que el número de identificación de dicho documento, esta basado en el algoritmo de Luhn, el cual es utilizado para validar secuencias numéricas o números de identificación con el propósito de proteger contra errores accidentales en la digitación de secuencias numéricas.


En esta entrada publicaré una función en C# (en otra articulo publicaré un procedimiento en oracle que permita realizar la misma función) la cual nos permite validar un número de cédula dominicano. Aunque el código es exclusivamente para el documento de identidad y electoral de los dominicanos,  la lógica es valida para cualquier documento que utilice secuencia numérica  basados en el algoritmo de Luhn o modulo 10

Aquí vamos.
         
  
 1          //* Método o función para validar una cédula dominicana*
 2           public bool ValidaCedula(string cedula)
 3           {
 4               //Declaración de variables a nivel de método o función.
 5               int verificador = 0;
 6               int digito = 0;
 6.5             int digitoVerificador=0;
 7               int digitoImpar = 0;
 8               int sumaPar = 0;
 9               int sumaImpar = 0;
10               int longitud = Convert.ToInt32(cedula.Length);
11               /*Control de errores en el código*/
12               try
13               {
14                   //verificamos que la longitud del parametro sea igual a 11
15                   if (longitud == 11)
16                   {
17                    digitoVerificador = Convert.ToInt32(cedula.Substring(10, 1));
18                      //recorremos en un ciclo for cada dígito de la cédula
19                      for (int i = 9; i >= 0; i--)
20                      {
21                          //si el digito no es par multiplicamos por 2
22                          digito = Convert.ToInt32(cedula.Substring(i, 1));
23                          if ((i % 2) != 0)
24                          {
25                              digitoImpar = digito * 2;
26                              //si el digito obtenido es mayor a 10, restamos 9
27                              if (digitoImpar >= 10)
28                              {
29                                  digitoImpar = digitoImpar - 9;
30                              }
31                              sumaImpar = sumaImpar + digitoImpar;
32                          }
33                          /*En los demás casos sumamos el dígito y lo aculamos 
34                           en la variable */
35                           else
36                           {
37                               sumaPar = sumaPar + digito;
38                           }
39                       }
40                      /*Obtenemos el verificador restandole a 10 el modulo 10 
41                      de la suma total de los dígitos*/
42                      verificador = 10 - ((sumaPar + sumaImpar) % 10);
43                    /*si el verificador es igual a 10 y el dígito verificador
44                      es igual a cero o el verificador y el dígito verificador 
45                      son iguales retorna verdadero*/
46                 if (((verificador == 10) & (digitoVerificador == 0))
47                      || (verificador == digitoVerificador))
48                      {
49                           return true;
50                      }
51                  }
52                  else
53                 {
54                  Console.WriteLine("La cédula debe contener once(11) digitos");
55                 }
56              }
57             catch
58              {
59                Console.WriteLine("No se pudo validar la cédula");
60             }
61              return false;
62         }

2 comentarios: