extraido de wikipedia algoritmo:
Procedimiento para obtener el dígito verificador
El RUT consta de dos partes, el número y el dígito verificador separados por un guión. En el siguiente ejemplo se toma como RUT el número 30.686.957-X, donde 30.686.957 es el número del RUT y X es el dígito verificador que no conocemos o que queremos verificar:
- Se procede a tomar el número de RUT de derecha a izquierda, multiplicando cada dígito por los números que componen la serie numérica 2,3,4,5,6,7; y sumando el resultado de estos productos, como se muestra a continuación (si se ha aplicado la serie hasta el 7 y quedan dígitos por multiplicar, se comienza la serie nuevamente):
En el ejemplo:
7 × 2 = 14,
5 × 3 = 15,
9 × 4 = 36,
6 × 5 = 30,
8 × 6 = 48,
6 × 7 = 42,
0 × 2 = 0,
3 × 3 = 9, entonces la suma de los productos es: 14+15+36+30+48+42+0+9 = 194
- Al número obtenido por la suma del producto de cada dígito por la serie ya mencionada, se le aplica módulo 11, o sea, se divide por 11 y se determina el resto de la división.
En el ejemplo:
194 : 11 = 17
Resto: 7
Ahora se le resta a 11 el resto:
En el ejemplo:
11 - 7 = 4
Si el resultado es 11, el dígito verificador será 0.
Si el resultado es 10, el dígito verificador será K.
En otro caso el resultado será el dígito verificador.
Como en el ejemplo el resultado de la resta es 4, el dígito verificador es 4.
Por ende, el RUT del ejemplo es el 30.686.957-4.
Este codigo es para generar el digito berificador
- Código:
-
Dim Digito, Contador, Multiplo, Acumulador, Rut As Integer
Contador = 2
Acumulador = 0
Rut = Val(TxtRut.Text) 'le asigno lo que esta en el textbox del RUT
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)
TxtDigito.Text = CStr(Digito) 'Transformo de Numero a Texto con el CStr y lo asigno al Text Box del Digito
If Digito = 10 Then TxtDigito.Text = "K"
If Digito = 11 Then TxtDigito.Text = "0"
Lo mismo es para verificar la diferencia que guardo el digito en una variable y lo comparo con el texbox del digito por ejemplo...
- Código:
-
Resultado = CStr(Digito) 'Transformo de Numero a Texto con el CStr y lo asigno al Text Box del Digito
If Digito = 10 Then Resultado = "K"
If Digito = 11 Then Resultado = "0"
If Resultado = TxtDigito.text then
msgbox "Verdadero"
Else
msgbox "Falso"
End If
Aqui le dejo el codigo para que puedan verlo en acción