Algoritmo para Validar RUT

Para validar de forma estricta el RUT, usado por ejemplo en Chile, que no permite ni puntos ni guiones, se pueden usar estos algoritmos. Los dejo en dos lenguajes javascript para validar en cliente y vb.net para validar en servidor.

 

function validar(codigo)
{
		var rut; //lng
		var bRet=false;
        var digitoControl="";//str

       try {

            bRet = false;
            codigo = codigo.toUpperCase().trim();

            var largo=parseInt(codigo.length,10);
			var ultimo=parseInt(largo-1,10);
            

            //Si tiene menos de 8 caractéres es incorrecto
            if (largo < 6 || largo > 12) { return false;}
			for(var i=0;i<ultimo;i++)
			{
				var c= codigo.charCodeAt(i);
				if (i<ultimo){if (c<48 || c>57){return false;}}
				else{if (c<48 && c>57 && c != 75){return false;}}
				
			}
           
			rut= codigo.substring(0,ultimo).toString();
            var digitoControlEsperado=codigo.substring(codigo.length-1, codigo.length).toString();
           
            digitoControl = RutDigito(rut).toString();

            if(digitoControl == digitoControlEsperado ){bRet=true;}

        }
		catch(err) {
					bRet = false;
		}
		return bRet

}

 function RutDigito(T) {
     var M=0,S=1;
     for(;T;T=Math.floor(T/10))
        S=(S+T%10*(9-M++%6))%11;
     return S?S-1:'K';
  }

Para validar con VB se puede usar este:

  Public Function VerificaRUTChile(ByVal codigo As String) As Boolean
        Dim rut As Long
        Dim bRet As Boolean
        Dim digitoControl As String

        Try

            bRet = False
            codigo = codigo.Trim.ToUpper

            Dim largo As Integer = codigo.Length
            Dim penultimo As Integer = largo - 2
            Dim ultimo As Integer = largo - 1

            'Si tiene menos de 8 caractéres es incorrecto
            If (largo < 6 Or largo > 12) Then Return False

            For i As Integer = 0 To ultimo
                Dim c As Char = CChar(codigo.Substring(i, 1))

                If i < ultimo Then
                    'Solo admite numeros antes del ultimo caracter
                    If Asc(c) < 48 Or Asc(c) > 57 Then Return False
                Else
                    'Solo admite numeros o K mayúscula en el digito de control.
                    If (Asc(c) < 48 And Asc(c) > 57) And (Asc(c) <> 75) Then Return False 'K
                End If

            Next

            rut = CType(codigo.Substring(0, codigo.Length - 1), Long)
            Dim digitoControlEsperado As String = Right(codigo, 1)

            digitoControl = RutDigito(rut)

            If digitoControl = digitoControlEsperado Then
                bRet = True
            End If

        Catch ex As Exception
            bRet = False


        End Try
        Return bRet

    End Function

    Private Function RutDigito(ByVal Rut As Long) As String
        Dim Digito As Long
        Dim Contador As Long
        Dim Multiplo As Long
        Dim Acumulador As Long

        Contador = 2
        Acumulador = 0
        While Rut <> 0
            Multiplo = (Rut Mod 10) * Contador
            Acumulador = Acumulador + Multiplo
            Rut = Rut \ 10
            Contador = Contador + 1
            If Contador = 8 Then
                Contador = 2
            End If
        End While
        Digito = 11 - (Acumulador Mod 11)
        RutDigito = CStr(Digito)
        If Digito = 10 Then RutDigito = "K"
        If Digito = 11 Then RutDigito = "0"
    End Function