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
Muchas gracias todo ok
Excelente, muchas gracias amigo me funciono perfect.- saludos..
Consulta, tengo un problema si el rut es 5.555.555-5, quiero decir si tiene largo 8 en vez de 9, en que parte del codigo tendria que hacer el cambio para que acepte de las 2 formas? gracias!
el método devuelve rut valido si es con guion o sin guion como puedo modificarlo para que devuelva verdadero si ingreso solo este formato 12345678-9
Este método fue pensado para validar el rut y por eso omite el formato, si quieres puedes validar el formato con expresiones regulares y luego usar este método. También te recomiendo autoformatear el rut para que siempre sea como lo esperas https://www.qis.cl/formatear-rut-chileno-en-c/
Muchas Gracias.
Me sirvio la logica de tu codigo.
Lo modifique para meterlo dentro de la clase modelo en asp mvc 5
A lo mejor le puede servir a alguien— aca va.
public IEnumerable Validate(ValidationContext ValidationContext)
{
var errores = new List();
//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;
}
else
{
errores.Add(new ValidationResult(«El Rut no es valido», new string[] { «Rut» }));
}
}
catch (Exception)
{
}
return errores;
si le mando como parámetro 4324 me devuelve que el rut es válido, creo que hay que hacer una correción ahí
Frank.. está claro con el procedimiento de validación del Rut chileno
29/11=7
7-11=4
Estimados como utilizo este codigo en un windows form con un text box y un boton??? desde ya muchas gracias
Una de las opciones es utilizar el evento validated en el TextBox y hacer una llamada esta función.
if(!validarRut(txtPrueba.Text)){
System.Windows.Forms.MessageBox.Show(«Rut inválido!»);
txtPrueba.Focus();
}
Saludos
Muchas Gracias, lo utilice con el Evento de un boton, funciona bien…Interesante seria que autocomplete los puntos y el guion para no digitarlos 🙂
Utiliza la función formatear que tenemos disponible en nuestro sitio. Puedes usarla por ejemplo en el evento validated, para que cada vez que valide formatee los ruts.
Saludos
Hola, me arroja un error en char.Parse, alguna sugerencia?
Estimado favor adjuntar la forma en la cual lo estas utilizando para poder entender mejor el error. Saludos
Viictor:
Es mejor cambiar todos los parse por Convert.ToChar , Convert.ToInt32, .ToString(), etc….
Podrías explicarnos con más detalles el porque consideras mejor ese cambio? Saludos
Es Mejor LA conversion con el Convert y mas rapido, de hecho utilizas menos recursos y es muy efectivo, con Convert Puedes convertir de Todo y si no puede convertir tambien aparece.