Calcular letra dni

Vereis, estoy recliclando codigo de visual basic, y aqui me he quedado bastante atrancado, intentando pasarlo a este lenguaje (hay mas diferencia entre esto y visual basic, cosa que creia que eran mas parecidos). Bueno, a lo que voy: necesito averiguar la letra del dni cuando se escribe en un texfield. ste es el codigo que tengo en visual basic, es una funcion, pero aqui no me funciona:

Function Calcular_DNI(Num As String)

  1. Dim Tabla()

  2. Dim Result As Currency

  3. If Len(Num) < 7 Or Len(Num) > 8 Then

  4. MsgBox "ERROR : el DNI deve de tener 7 o 8 numeros"
    
  5. Exit Function
    
  6. End If

  7. Result = Num Mod 23

  8. Tabla = Array("-T", “-R”, “-W”, “-A”, “-G”, “-M”, “-Y”, “-F”, “-P”, “-D”, “-X”, “-B”, “-N”, “-J”, “-Z”, “-S”, “-Q”, “-V”, “-H”, “-L”, “-C”, “-K”, “-E”)

  9. Calcular_DNI = Num & Tabla(Result)

End function

En Xojo, lo he escrito as, pero me

Function Calcular_DNI(Num as string) as string()
dim longitud as integer
dim tabla() as string
dim result as Currency
If Len(Num) < 7 Or Len(Num) > 8 Then
MsgBox “ERROR : el DNI deve de tener 7 o 8 numeros”
Exit Function
end if
longitud=len(num)
result = longitud Mod 23
tabla = Array("-T", “-R”, “-W”, “-A”, “-G”, “-M”, “-Y”, “-F”, “-P”, “-D”, “-X”, “-B”, “-N”, “-J”, “-Z”, “-S”, “-Q”, “-V”, “-H”, “-L”, “-C”, “-K”, “-E”)
return tabla

end function

pero no me funciona

http://gaussianos.com/calcular-la-letra-del-dni/

gracias, peter, he seguido eso y esto es lo que tengo creado:

Function Calcular_letra_dni (Num as string) as string

dim num_integer as integer
dim tabla() as string
dim a as integer
dim b as integer
dim result as integer
num_integer=val(num)
a=(num_integer/23)
b=a*23
result=a-b
Tabla = Array("-T", “-R”, “-W”, “-A”, “-G”, “-M”, “-Y”, “-F”, “-P”, “-D”, “-X”, “-B”, “-N”, “-J”, “-Z”, “-S”, “-Q”, “-V”, “-H”, “-L”, “-C”, “-K”, “-E”)
end function

cuanto llamo a la funcion as:

dim letra as string
letra=Calcular_letra_dni (me.text) 'porque estoy en el evento key_up de un textfield, por eso pongo me.text

me falla, ayyy, que paciencia hay que tener cuando se migra a otro lenguaje.

Creo q le falta es:

Return tabla(result)

result es el resultado de num_integer modulo 23 q sera un nmero entre 0 y 23 a la vez sera el ndice de Tabla.

si, le faltaba eso, pero aun asi me la calcula mal, jeje. No se donde esta el error

Vale, ya me funciona. Para el que lo busque tambien, aqui est la funcion:

Function Calcular_letra_dni (num as string) as string
Dim Tabla() as string
dim longitud as currency
longitud=len(num)
Dim Result As currency
If Len(Num) < 7 Or Len(Num) > 8 Then
'MsgBox “ERROR : el DNI deve de tener 7 o 8 numeros”
Exit Function
End If
Result = val(num) Mod 23
Tabla = Array("-T", “-R”, “-W”, “-A”, “-G”, “-M”, “-Y”, “-F”, “-P”, “-D”, “-X”, “-B”, “-N”, “-J”, “-Z”, “-S”, “-Q”, “-V”, “-H”, “-L”, “-C”, “-K”, “-E”)
return Tabla(result)
end function

Y luego le tengo puesto en el evento key_down del textfield:

if key=chr(13) then
dim letra as string
letra=Calcular_letra_dni (me.text)
me.text=me.text + letra()
end if

Por fin, otra cosa menos, hay que ver lo que me atranco en tonterias. Gracias Bernardo y Peter.