Visual Basic - Calculo IBAN

Life is soft - evento anual de software empresarial
   
Vista:

Calculo IBAN

Publicado por Angel angel.zapata@live.com (4 intervenciones) el 10/12/2013 18:16:41
Hola grupo,

estoy con el cálculo del IBAN y me encuentro que para aplicar el algoritmo necesito dividir una cifra de 26 dígitos entre 97 y obtener el resto

Cifra MOD 97

pero obviamente sea cual sea el tamaño que asigne a la variable me arroja un error de desbordamiento y no conozco formula para solucionarlo.

¿Alguna idea?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

SOLUCIONADO Calculo IBAN

Publicado por Angel (4 intervenciones) el 10/12/2013 18:50:14
Resuelto, la solucion estaba en el mismo manual de cálculo del IBAN pero solo como comprobación.

la expongo en la hoja de excel que adjunto, creo que os resultará util.

Por supuesto para validar la formula es la misma.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

SOLUCIONADO Calculo IBAN

Publicado por jose (15 intervenciones) el 10/12/2013 19:13:02
http://www.lawebdelprogramador.com/foros/Access/1409230-codigo_bancario_IBAN.html

en el foro de access lo hemos resuelto ya

la division de los 26 digitos se hace un o a uno restoanterior & digito /97 en un bucle del tamaño de la cuenta +6


1
2
3
4
5
6
7
8
9
10
11
12
Dim A As String
A = "3016 0153 41 1234567890 142800"
A = Replace(A, " ", "")
For N = 1 To Len(A)
DIVIDENDO = RESTO & Mid(A, N, 1)
 RESTO = DIVIDENDO Mod 97
Next N
 IBAN = "IBAN" & " " & "ES" & Format$((98 - RESTO), "00") & " "
 For N = 1 To Len(A)-6 Step 4
IBAN = IBAN & " " & Mid(A, N, 4)
Next N
 MsgBox "CCC " & left$( A ,20) & " " & IBAN

jose manuel desde el astillero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

SOLUCIONADO Calculo IBAN

Publicado por Angel (4 intervenciones) el 11/12/2013 12:12:12
Hola Jose,

yo había hecho un código parecido, pero con grupos de 9, tal y como indica la AEB, pero tu solución es mas sencilla de aplicar, la voy a adaptar y a adoptar.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

SOLUCIONADO Calculo IBAN

Publicado por Angel (4 intervenciones) el 12/12/2013 09:11:07
Codigo adaptado y adoptado

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Public Function IBANCalculo(Pais As String, Cuenta As String) As String
    ' Recibe el pais con 2 letras (ES para España)
    ' Recibe el número de cuenta
 
    Dim Letras As String * 26
    Dim IBAN As String
    Dim Dividendo As Integer
    Dim Resto As Integer
 
    ' Quita los posibles espacios
    Cuenta = Replace(Cuenta, " ", "")
 
    ' Calcula el valor de las letras, las quita y añade el valor al final
    Letras = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    IBAN = Cuenta & CStr(InStr(1, Letras, Left(Pais, 1)) + 9) & CStr(InStr(1, Letras, Right(Pais, 1)) + 9) & "00"
 
    For Contador = 1 To Len(IBAN)
        Dividendo = Resto & Mid(IBAN, Contador, 1)
        Resto = Dividendo Mod 97
    Next Contador
 
    IBANCalculo = "IBAN" & Pais & Format((98 - Resto), "00") & Cuenta
 
End Function
 
Public Function IBANValidacion(IBAN) As Boolean
    ' Recibe el IBAN
 
    Dim Letras As String * 26
    Dim Dividendo As Integer
    Dim Resto As Integer
 
    Letras = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 
    ' Quita la palabra IBAN
    IBAN = Replace(IBAN, "IBAN", "")
 
    ' Quita los posibles espacios
    IBAN = Replace(IBAN, " ", "")
 
    ' Calcula el valor de las letras, las quita y añade el valor al final
    IBAN = Mid(IBAN, 3, Len(IBAN) - 2) & CStr(InStr(1, Letras, Left(IBAN, 1)) + 9) & CStr(InStr(1, Letras, Mid(IBAN, 2, 1)) + 9)
 
    ' Quita los digitos de control y los pone al final
    IBAN = Mid(IBAN, 3, Len(IBAN) - 2) & Left(IBAN, 2)
 
    For Contador = 1 To Len(IBAN)
        Dividendo = Resto & Mid(IBAN, Contador, 1)
        Resto = Dividendo Mod 97
    Next Contador
 
    If Resto = 1 Then
        IBANValidacion = True
    Else
        IBANValidacion = False
    End If
 
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Javier

SOLUCIONADO Calculo IBAN

Publicado por Javier (1 intervención) el 22/01/2014 16:28:58
Buenas tardes, alguien ha probado el código pero con cuenta bancarias de Francia que incluyen lentras ademas de la FR del pais?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

SOLUCIONADO Calculo IBAN

Publicado por BOR (1 intervención) el 23/01/2014 09:59:06
buenas,
he introducido el código de jose manuel, y al hacer el cálculo y no coincide el dígito de control con el correcto (corroborado en varios sitios)
¿qué puede haber mal?
gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

SOLUCIONADO Calculo IBAN

Publicado por xve (178 intervenciones) el 10/12/2013 20:07:20
Gracias por comentarlo y adjuntar el archivo!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Calculo IBAN

Publicado por ARMANDO armandsole@telefonica.net (1 intervención) el 11/02/2014 12:02:26
Es cuestión de convertir la cifra de 26 dígitos en una cadena a la que he llamado "cad". Después he hecho este pequeño módulo.

1
2
3
4
5
6
7
8
9
10
11
12
13
Sub SEPA(cad, ib)
Dim x As Integer
x1 = Mid(cad, 1, 7)
r = x1 Mod 97
x2 = r & Mid(cad, 8, 7)
r = x2 Mod 97
x3 = r & Mid(cad, 15, 7)
r = x3 Mod 97
x4 = r & Mid(cad, 22, 7)
r = x4 Mod 97
r = 98 - r
ib = "ES" & Format(r, "00")
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar