Validador de Rut Chileno en C#
El siguiente método permite validar un Rut Chileno, retornando true en caso de ser válido y false en caso de ser incorrecto.
public bool validarRut(string rut ) { bool validacion = false; try { rut = rut.ToUpper(); rut = rut.Replace(".", ""); rut = rut.Replace("-", ""); int rutAux = int.Parse(rut.Substring(0, rut.Length - 1)); char dv = char.Parse(rut.Substring(rut.Length - 1, 1)); int m = 0, s = 1; for (; rutAux != 0; rutAux /= 10) { s = (s + rutAux % 10 * (9 - m++ % 6)) % 11; } if (dv == (char) (s != 0 ? s + 47 : 75)) { validacion = true; } } catch (Exception) { } return validacion; }
Esperamos sea de su utilidad
hola! super bueno el código, pero con cual me podría arrojar el mensaje de: «Rut Inválido» ?? porque con todos los numeros que ponga sale que es válido. Espero tu pronta respuesta 😀
En respuesta a tu pregunta, acabo de probar el método con «» y «123» y arroja false, si siempre te arroja true, quiere decir que posiblemente lo estas utilizando mal. Quedamos atentos a tus comentarios.
Saludos
Hola quería agradecerte funciona perfecto!!
Muchas gracias por tomarte el tiempo de agradecer. No dudes en dejarnos futuras consultas, estaremos encantados en poder ayudarte.
Saludos
Si esta el rut en entero y el digito verificador en string y si son sentencias aparte?
bool valid = validarRut(valor.ToString() + dv);
Muchas gracias
Disculpa, si tengo dichas variables rut y digito verificador en int como podría hacerlo? tendria que pasar el int a arreglo? como seria en ese caso, saludos
Me parece lógico que tengas la primera parte en un int, pero no así el dígito verificador, ya que eventualmente podría ser una letra «K». De todas maneras tendrías que hacer lo siguiente:
bool valid = validarRut(valor.ToString() + dv.ToString());
Saludos
Muchas gracias
hola soy nuevo en esto, como lo hago para llamar el metodo?
private void txtRut_Validated(object sender, EventArgs e)
{
}
tengo esto, que pongo dentro de los corchetes?
Debes ir al diseñador seleccionar el textbox al que deseas implementar esta utilidad y posteriormente ir al editor de eventos (en las propiedades del textbox lo identificas con un símbolo de un rayo) y buscar el evento Validated, veras que al lado hay un lugar donde puedes escribir, tu solo debes hacer doble clic en ese espacio y se creara automáticamente el método que mencionas.
Saludos
Estimado, muchas gracias por el código. Esto funciona correctamente en Windows Form, sin embargo estoy haciendo una aplicación en WPF y no encuentro la forma de hacer un evento equivalente a Validated. Sabes la forma de lograrlo? Muchas gracias nuevamente.
Estimado podrías usar el evento LostFocus que ocurre cuando pierde el foco el TextBox. El comportamiento es similar al validated.
Saludos
Te pasaste, me funcionó perfecto. Gracias por la ayuda y por la rapidez en responder! 🙂
graciassssssssssssssssssss 😀
gracias eres un master (y)
podrías usarlo para validar el rut y en caso de ser incorrecto limpiar el valor. Esto seria mas o menos asi:
if(!validarRut(((TextBox)sender).Text) ){
MessageBox.Show(«Rut Inválido»);
((TextBox)sender).Text = «»;
((TextBox)sender).Focus();
}
Saludos
estimado , me dice el siguiente error : el termino de la expresión object no es valido
Acabo de corregir la solución disculpa copie la palabra object pero debería ser sender
Saludos
perdona mi ignorancia pero como llamas al metodo ?
private void txtrutcli_Validated(object sender, EventArgs e)
{
}
que pongo entre los corchetes?
Estimado, hay alguna forma de implementar este código teniendo dos TextBox (Uno para el rut y el otro para el dígito verificador???.
Saludos
Si quieres usar este mismo método tendrías que concatenar los valores de ambos TextBox, si necesitas validar por separado tendrías que generar un método que valide el dígito verificador, a partir del numero ingresado en la primera caja de texto. Podrías usar la misma lógica de este método pero en lugar de retornar si es correcto o no retornarías hasta el calculo del DV y lo compararías contra el tuyo.
Quedo atento a tus comentarios.
Saludos
Estimado:
Me sale que el char.Parse no contiene una definicion para parse.
por que razón ocurre??
Estuve revisando y aunque no pusieras ninguna referencia char posee el método Parse, solo se me ocurre que estas trabajando con una versión anterior del framework de .NET. Si gustas puedes compartir tu clase para ver si tienes algún error.
Saludos
estimado, no funciono, le meti un rut valido y no funciona
Podrías indicarme como lo usaste?. Hemos revisado este validador y funciona correctamente.
seeee error fue un grosero error mio, me retracto estimado el codigo es 100% funcional
Bueno nos alegra que hayas podido solucionar tu inquietud.
Saludos
hola y como lo llamo para cuando en el momento de poner el rut me diga altiro si es correcto o no??
Debes llamar al método en el evento Validated. Saludos
Gracias Master!
Me ahorraste un dolor de cabeza jajaja
saludos desde Pto Varas
Por nada estimado, cualquier consulta no dude en hacérnosla llegar. Saludos
Gracias!!