Usar modulo que calcula dígitos de control en consulta

Tengo un modulo que me permite calcular dígitos o letras de control ( por ejemplo DNI, Cuentas bancarias, ... ) y quiero utilizarlo en una consulta.
Por ejemplo tengo una tabla con un campo NUMERODNI ( Numero DNI sin Letra ), quiero obtener una consulta con los Campos "NUMERODNI" y "LETRADNI" ( calculado con el Modulo )
La función se llama "letra_dni"
Respuesta
1
Pues si tienes la Función Letra_dni, ¿supongo qué el parámetro que le pasas es el numero del dni y te devuelve la letra no?, pues entonces pones en la consulta:
Letra_dni(numerodni) y ya lo tendrás.
Perfecto.
Ahora tengo un pequeño problema adicional y desde luego más complejo.
En el modulo tengo una función que calcula el dígito de control de una cuenta bancaria y se llama "dcbank2", su código es el siguiente:
Function dcbank2(serie)
Const PESOS = "06030709100508040201"
Dim l As Long, i As Integer, s As String
For i = 1 To Len(serie)
l = l + (Mid(serie, Len(serie) - i + 1, 1) * Mid(PESOS, ((i - 1) * 2) + 1, 2))
Next
Select Case 11 - (l Mod 11)
Case 11
dcbank2 = 0
Case 10
dcbank2 = 1
Case Else
dcbank2 = 11 - (l Mod 11)
End Select
End Function 
Como es posible que conozcas, se calcula empleando el modulo 11 y con el siguiente criterio : La suma de los productos obtenidos de multiplicar las cifras de las informaciones a verificar por sus correspondientes pesos (6,3,7,9,10,5,8,4,2,1), se divide por 11. La diferencia entre el resto obtenido de la división y 11 será el dígito de control. Si el dígito de control resultante fuera 10, se aplicara en su lugar el dígito 1, y si fuera 11, el 0.
Mi problema es el siguiente : Tengo que calcular otro dígito de control, en este caso sobre un numero de 11 dígitos, en vez de sobre 10 como el de cuenta bancaria, usando el modulo 11, con la siguiente particularidad : Los pesos son : 4,3,2,9,8,6,7,5,4,3 y 2. Cada uno de los dígitos se multiplicaran por su peso correspondiente. La suma de todos los productos se dividirá por 11. Si el resto de esta división es 10, el dígito de control será "0", en caso contrario, será el resto de la misma.
Ya que me gusta investigar copiando y pegando, en plan "chapuza" adapté el código anterior y cree una nueva variable dcrefdom
Function dcrefdom(serie)
Const PESOS = "0403020908070605040302"
Dim l As Long, i As Integer, s As String
For i = 1 To Len(serie)
l = l + (Mid(serie, Len(serie) - i + 1, 1) * Mid(PESOS, ((i - 1) * 2) + 1, 2))
Next
Select Case l Mod 11
Case 11
dcrefdom = 0
Case 10
dcrefdom = 1
Case Else
dcrefdom = l Mod 11
End Select
End Function
Debo de tener algo mal ( lo raro sería que estuviese bien ), ya que si hago los cálculos con excel me salen otros dígitos.
Bueno, no sé si me estará "pasando" con mi consulta y esta ampliación tal vez sea pedir demasiado.
En cualquier caso muchas gracias.
marca54
No se donde puede estar el fallo, pero ni merece la pena averiguarlo. Al ser una rutina standard del calculo de control seguro que tienes por internet 1000 ejemplos con código que funcionan a la maravilla. Lo único que se me ocurre es que la corras paso a paso o pongas msgbox con los campos para ver si lo que sale es correcto.
En cualquier caso deberías haber finalizado la anterior y preguntar esta nueva.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas