Función creada por el usuario

Hola, podrías ayudarme con lo siguiente:
La idea es que se tiene un número entero que es el RUT (con un número de dígitos desconocido y sin dígito verificador) en una variable rut.
El cálculo del dígito verificador se hace tomando los dígitos del entero uno por uno, se multiplican por una constante asociada a la posición y el resultado se va sumando a un total. Finalmente, el total es dividido por 11 y se toma el resto r. El dígito es 11 - r. Si es igual a 11 se usa el "0", si es igual a 10 se usa "k".
El método parte del dígito menos significativo y sigue hasta el último
p = d1*2 + d2*3 + d3*4 + d4*5 + d5*6 + d6*7 + d7*2 + d8*3 + ...
Ojalá puedas ayudarme

1 Respuesta

Respuesta
1
OK. Creo que está.
Hubiera sido bueno que enviaras un ejemplo numérico para que chequeara el resultado.
Hubo, también algunos huecos en la explicación.
Por ejemplo, en la serie que indicas, el factor posicional llega a 7 y reinicia en 2 para la séptima cifra.
Asumo que éstas se toman de derecha a izquierda.
Cuando el resultado es 10 se usa "k", pero "k" no está definida. ¿Es la letra "k" el dígito verificador?
En caso de que no fuera así, la función tiene una variable con este nombre que podrás reemplazar por el valor a tomar en este caso.
Inserta un módulo nuevo en el VBE y pega la siguiente función:
Public Function RUTdig(Numero)
Application.Volatile
SumaDigs = 0
NumTmp = Trim(Str(Numero))
TopePos = 7
UltDig = Len(NumTmp)
DigAct = 1
M_fact = 2
k = "k"
'Calcula suma de factores
Do
dig = Val(Mid(NumTmp, UltDig - DigAct + 1, 1))
Res1 = dig * M_fact
SumaDigs = SumaDigs + Res1
DigAct = DigAct + 1
M_fact = Val(IIf(M_fact = TopePos, 2, M_fact + 1))
Loop While DigAct <= UltDig
'Determinación del Dígito verif
dig = SumaDigs Mod 11
dig = 11 - dig
Select Case dig
Case 11
dig = 0
Case 10
dig = k
End Select
RUTdig = dig
End Function
Cierra el editor y graba el archivo.
Ahora, bastará que ingreses en una celda la función:
=RUTDIG(B5)
Y obtendrás el dígito calculado de acuerdo a las instrucciones que me diste.
Haz algunas pruebas y dime si es correcto. (En cuyo caso espero una constelación ;)
Un abrazo!
Fernando

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas