-
-
Save donpandix/045f865c3bf800893036 to your computer and use it in GitHub Desktop.
/// <summary> | |
/// Validador de RUT Chileno | |
/// Hace uso del algoritmo Modulo 11 | |
/// | |
/// Chilean ID Number validator | |
/// Use the algorithm called Module 11 | |
/// </summary> | |
class Rut { | |
/// <summary> | |
/// Metodo de validación de rut con digito verificador | |
/// dentro de la cadena | |
/// </summary> | |
/// <param name="rut">string</param> | |
/// <returns>booleano</returns> | |
public static bool ValidaRut(string rut) { | |
rut = rut.Replace(".", "").ToUpper(); | |
Regex expresion = new Regex("^([0-9]+-[0-9K])$"); | |
string dv = rut.Substring(rut.Length - 1, 1); | |
if (!expresion.IsMatch(rut)) { | |
return false; | |
} | |
char[] charCorte = { '-' }; | |
string[] rutTemp = rut.Split(charCorte); | |
if (dv != Digito(int.Parse(rutTemp[0]))) { | |
return false; | |
} | |
return true; | |
} | |
/// <summary> | |
/// Método que valida el rut con el digito verificador | |
/// por separado | |
/// </summary> | |
/// <param name="rut">integer</param> | |
/// <param name="dv">char</param> | |
/// <returns>booleano</returns> | |
public static bool ValidaRut(string rut, string dv) { | |
return ValidaRut(rut + "-" + dv); | |
} | |
/// <summary> | |
/// método que calcula el digito verificador a partir | |
/// de la mantisa del rut | |
/// </summary> | |
/// <param name="rut"></param> | |
/// <returns></returns> | |
public static string Digito(int rut) { | |
int suma = 0; | |
int multiplicador = 1; | |
while (rut != 0) { | |
multiplicador++; | |
if (multiplicador == 8) | |
multiplicador = 2; | |
suma += (rut % 10) * multiplicador; | |
rut = rut / 10; | |
} | |
suma = 11 - (suma % 11); | |
if (suma == 11) { | |
return "0"; | |
} else if (suma == 10) { | |
return "K"; | |
} else { | |
return suma.ToString(); | |
} | |
} | |
} |
Is for a Chilean ID number, the algorithm is called ”module 11”.
It would be great if you can edit the gist code to include a comment stating that.
It would be great if you can edit the gist code to include a comment stating that.
Thanks for the advice, I just add a text in the head of the code with this information. Thanks again.
Hola,
muchas gracias por tu aporte, soy nuevo en esto. Estoy tratando de implementar la validación solamente del "digito verificador", tengo una consulta, Para el caso del método public static string Digito(int rut) { ....} , el rut que le debo pasar debe ser antes del "-" ?, por ejemplo si tengo un número 21924302-2 debería pasar como parámetro el número "21924302" y el método retornaría el 2?. muchas gracias
Hola amigo, si efectivamente, cuando haces uso de ese método en particular, lo que obtienes es el valor del dígito verificador. de 0 a 9 o el valor K mayúscula
Hola master, buenas noches, este método sabes si funciona para Xamarin?
Hola amigo, una consulta, podrías explicar la línea 18? Me interesa usar tu validador, pero para el caso de uso que tengo debo considerar rut's de empresas, me gustaría saber cómo debería modificar la expresión regular que usas para considerar esto, agradecería tu ayuda, saludos :)
Hola master, buenas noches, este método sabes si funciona para Xamarin?
Hola Buenas, la verdad no lo he probado en esa plataforma, de todas maneras intuyo que si, ya que lo que la función que expongo es de c# mas que de una plataforma en particular, a lo mejor haya que ajustar algo, pero de todas formas debiese trabajar. Saludos
Hola amigo, una consulta, podrías explicar la línea 18? Me interesa usar tu validador, pero para el caso de uso que tengo debo considerar rut's de empresas, me gustaría saber cómo debería modificar la expresión regular que usas para considerar esto, agradecería tu ayuda, saludos :)
Hola que tal, si es bien sencilla y la verdad es que se usa de forma muy similar en otros lenguajes (como php por ejemplo) y lo que hace esa línea en particular es generar una regla de validación en base a una expresión regular, la cual valida que el texto de entrada tenga la forma #######-# , donde la primera parte (previo a la linea divisoria) debe tener al menos 1 número, luego una linea divisoria y finalmente un dígito o un carácter "K" por lo que debiese servir para RUTs de empresa, de todas maneras te insto a que incursiones el tema de las expresiones regulares porque es muy útil en validaciones de forma en el valor de los parámetros, en particular en lo que son del tipo GET o POST para evitar la inyección del código en tus aplicaciones.
Por otra lado Regex es una clase de C# que permite tomar como entrada una expresión regular para después evaluar otras cadenas de texto si se ajustan al patrón de la expresión regular. (usado en la línea 20)
adjunto un pantallazo con la prueba de la expresión que hice en la página https://regexr.com que es muy útil para modificar o crear tus propias expresiones regulares
Hola Cesar, muchas gracias por la pronta respuesta, explicación muy detallada, muy útil, saludos :)
Excelente aporte.
Hola! Estoy trabajando en un proyecto .NET 7 y me encontré con tu gists, te agradezco el trabajo ya que me ahorró tiempo. He cambiado unas cosas para poder adaptarlo a las nuevas versiones, por si a alguien más le llega a servir: https://gist.github.com/Dizkm8/68d63edb3c5941e45597cfaebaca03f8
Saludos!
For which RUT is this? Chile?, Uruguay?