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 }
no esta declarada la varible "digitoVerificador"
ResponderEliminarGracias por la observación. corregido
ResponderEliminar