Este algoritmo ya es muy conocido pero no está demás recordarlo para quienes aún no lo han implementado. A continuación presento en C# la clase Rut con los siguientes métodos públicos y estáticos (no se necesita crear una instancia de la clase para usarla):
- Valido: recibe un Rut como cadena incluyendo el guión y digito verificador (“99999999-9”) devolviendo verdadero si el Rut es correcto.
- Digito: recibe un Rut como entero sin incluir el dígito verificador (99999999) devolviendo este último como cadena.
public class Rut { public static bool Valido(string rut) { rut = rut.Replace(".", "").ToUpper(); Regex r = new Regex("^([0-9]+-[0-9K])$"); if (r.IsMatch(rut)) return rut.Substring(rut.Length - 1, 1) == Digito(int.Parse(rut.Substring(0, rut.Length - 2))); else return false; } 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(); } } |
Se agradece la clase es muy util, el unico alcance es que en la linea:
return rut.Substring(rut.Length – 1, 1) == digito(int.Parse(rut.Substring(0, rut.Length – 2)));
digito debiera empezar con una D mayuscula.
Muchas gracias de nuevo.
Gracias por la correción que ya fue aplicada porque C# es sensible a mayúsculas y minúsculas.