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

También te podría gustar...

51 Respuestas

  1. Barbara Lopez dice:

    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

  2. Fabiola Clavijo dice:

    Hola quería agradecerte funciona perfecto!!

  3. christian dice:

    Si esta el rut en entero y el digito verificador en string y si son sentencias aparte?

  4. christian dice:

    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

  5. Jhonny dice:

    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

      • Esteban dice:

        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.

  6. claudio dice:

    graciassssssssssssssssssss 😀

  7. miguel dice:

    gracias eres un master (y)

  8. 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

  9. miguel dice:

    perdona mi ignorancia pero como llamas al metodo ?

    private void txtrutcli_Validated(object sender, EventArgs e)
    {

    }

    que pongo entre los corchetes?

  10. 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

  11. 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

  12. rodrigo dice:

    estimado, no funciono, le meti un rut valido y no funciona

  13. Darwin Mendoza dice:

    hola y como lo llamo para cuando en el momento de poner el rut me diga altiro si es correcto o no??

  14. Gracias Master!
    Me ahorraste un dolor de cabeza jajaja

    saludos desde Pto Varas

  15. Mauricio Zepeda dice:

    Gracias!!