× Principio de Gattes: La probabilidad de hacer el ridículo en una demostración pública de tu software es directamente proporcional al número de gente viéndola.

Código

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace NAMESPACE-HERE
{
    class ValidadorRut
    {
        string[] numerosverificadores = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "K", "k" };

        public Boolean ValidarRut(String rut)
        {
            //Si el rut no trae guión lo agrega.
            if (!rut.Contains("-"))
            {
                rut = rut.Substring(0, rut.Length - 1) + "-" + rut[(rut.Length - 1)];
            }
            //Con el guion puesto parto el String con split.
            String[] partes = rut.Split('-');
            //Quito espacios externos si existieran.
            partes[0] = partes[0].Trim();
            //Quito espacios internos si existieran.
            partes[0] = partes[0].Replace(" ", "");
            //Quito puntos si existieran
            partes[0] = partes[0].Replace(".", "");            
            String verificador = partes[1].Trim();

            //Hago un pre-chekeo del digito verificador.
            Boolean verifier = true;
            foreach (string caracter in numerosverificadores)
            {
                if (caracter == verificador)
                {
                    verifier = true;
                }
                else
                {
                    verifier = false;
                }
            }

            if (verifier)
            {

                //Si el dígito está dentro de los válidos entonces hago la operación.
                int multiplicador = 2;
                int suma = 0;
                int resto = 0;

                for (int i = partes[0].Length - 1; i >= 0; i--)
                {
                    String numero = partes[0].ToString()[(i)].ToString();
                    int digito = int.Parse(numero);
                    suma = suma + (digito * multiplicador);
                    multiplicador++;
                    if (multiplicador == 8)
                    {
                        multiplicador = 2;
                    }
                }
                //Calculo el resto.
                resto = suma % 11;

                //Si el valor string de la resta de 11-resto, comparado con la parte 1 (dígito verificador)
                //retorna cero (si son iguales) Ó
                //si 11-resto es igual a diez y al mismo tiempo la parte 1 (dv) es igual a K

                if ((((11 - resto == 11) && partes[1].ToString()[0] == '0')) || (((11 - resto == 10) && partes[1].ToString()[0] == 'k')) || (((11 - resto == 10) && partes[1].ToString()[0] == 'K')) || (((11 - resto == 1) && partes[1].ToString()[0] == '1')) || (((11 - resto == 2) && partes[1].ToString()[0] == '2')) || (((11 - resto == 3) && partes[1].ToString()[0] == '3')) || (((11 - resto == 4) && partes[1].ToString()[0] == '4')) || (((11 - resto == 5) && partes[1].ToString()[0] == '5')) || (((11 - resto == 6) && partes[1].ToString()[0] == '6')) || (((11 - resto == 7) && partes[1].ToString()[0] == '7')) || (((11 - resto == 8) && partes[1].ToString()[0] == '8')) || (((11 - resto == 9) && partes[1].ToString()[0] == '9')))
                {
                    //rut válido            
                    return true;
                }
                else
                {
                    //rut no válido            
                    return false;
                }
            }
            else
            {
                return false;
            }

        }
    }
}
No hay información extra.
No hay video demostrativo.

DESCARGO DE RESPONSABILIDAD

LEER CON DETALLE ESTA INFORMACIÓN

Los algoritmos se ofrecen para libre uso y sin garantías de ningún tipo. Estos códigos pueden no ser los más óptimos ya que han sido recopilados a través del tiempo y pudieran existir versiones mejores, toma el contenido de esta página únicamente como una ayuda.

Volver