
26/08/2008, 00:08
|
| | Fecha de Ingreso: agosto-2008
Mensajes: 1
Antigüedad: 16 años, 8 meses Puntos: 0 | |
Pequeño problemilla de tipos Necesito un poco de ayuda, soy nuevo en este lenguaje y nosé por donde coger lo que acontinuacion os expongo. El siguiente codigo, a mi parecer, bien...no me coge el siguiente bucle: (me comenta que ' no coinciden los tipos' )
Si alguno se vé capaz de ayudarme lo agradecería.
El codigo que me dá problemas lo marco entre //////
Public Function VALIDAR_CIF(ByVal valor As String) As Boolean
Dim strLetra As String, strNumero As String, strDigit As String
Dim strDigitAux As String
Dim auxNum As Integer
Dim i As Integer
Dim suma As Integer
Dim letras As String
letras = "ABCDEFGHJKLNPQRSUVWX"
valor = UCase(valor)
' Comprobamos que sean 9 caracteres
If Len(valor) <> 9 And Not IsNumeric(Mid(valor, 2, 7)) Then
VALIDAR_CIF = False
End If
strLetra = Mid(valor, 1, 1) ' letra del CIF
strNumero = Mid(valor, 2, 7) ' Codigo de Control
strDigit = Mid(valor, 9) ' CIF menos primera y ultima posiciones
If InStr(letras, strLetra) = 0 Then ' comprobamos la letra del CIF (1ª posicion)
mensaje = "la letra introducida no corresponde a un CIF"
VALIDAR_CIF = False
End If
' En siete posiciones: las posiciones pares se suman.
' Las impares se multiplican por 2 sumando los resultados.
' Se divide el digito entre 10, para hallar el digito de control.
'ESTE ES EL CODIGO PROBLEMATICO
/////////////////////////////////////////////////////////////////////////////
For i = 1 To 7
If i Mod 2 = 0 Then
suma = suma + CInt(Mid(strNumero, i, 1))
Else
auxNum = CInt(Mid(strNumero, i, 1)) * 2
suma = suma + (auxNum \ 10) + (auxNum Mod 10)
End If
Next
////////////////////////////////////////////////////////////////////////////////
suma = (10 - (suma Mod 10)) Mod 10
Select Case strLetra
' Si son N P Q R S, el digito de control es alfabético
Case "N", "P", "Q", "R", "S"
suma = suma + 64
strDigitAux = Chr(suma)
' Si es X, busca en NIF (Es Extrangero)
Case "X"
strDigitAux = Mid(CalculaNIF(strNumero), 8, 1)
' Si no es todo lo anterior el dígito de control es númerico
Case Else
strDigitAux = CStr(suma)
End Select
If strDigit = strDigitAux Then
VALIDAR_CIF = True
Else
VALIDAR_CIF = False
End If
End Function |