Calcular digito control del IBAN

Hola,

Si estáis desarrollando aplicaciones de contabilidad, y necesitáis calcular el dígito de control del IBAN (cuenta internacional española),  al final tenéis un código que podréis aplicar en vuestras aplicaciones, yo lo he probado y funciona.

Os explico como funciona… La función esta en Visusal Basic 6 (VB6). La función recibe el número de cuenta de la persona a crear el dígito de control del IBAN.

Como no hay variable capaz de almacenar un número de 26 dígitos se trabaja con un string y luego se trocea en partes de 8 y se trabaja con grupos más pequeños. Se calculan por separado y se va obteniendo el modulo de 97. El resultado final se resta a 98 y lo que obtenemos es el dígito de control del IBAN.

cuenta = Format(rs!idbanco, String(4, “0″))
cuenta = cuenta & Format(rs!idSucursal, String(4, “0″))
cuenta = cuenta & Format(rs!digitocontrol, String(2, “0″))
cuenta = cuenta & Format(rs!cuenta, String(10, “0″))

digitoControl = dcIBAN(cuenta)

Function dcIBAN(ccc As String)
Dim n, v, r, j

‘para calcular el digito de control de IBAN hay que poner la iniciales del pais ES
‘E = 14 ; S = 28
‘ y añadirselas al final del numero de cuenta mas 00

ccc = ccc & “142800″

‘ahora hay que obtener el MOD 97 del ccc
‘para ello troceamos el numero de 26 digitos en trozos

v = Split(Format(ccc, “###### ###### ###### ###### ######”), Space(1))

r = val(v(0)) Mod 97

For j = 0 To UBound(v) – 1
r = (r & v(j + 1)) Mod 97
Next j

‘una vez que tenemos el mod 97 del CCC hay que restarselo a 98
‘y devolverlo con 2 digitos

dcIBAN = Format(98 – val(r), String(2, “0″))
End Function

 

Marcos Pizarro Giménez
About these ads

Publicado el 5 enero, 2011 en Código fuente, Software, Tutoriales y etiquetado en , , . Guarda el enlace permanente. 3 comentarios.

  1. Para otros pasis usar estos valores de LETRA a NUMERO (ver que ES coincide):
    ‘A=10 G=16 M=22 S=28 Y=34
    ‘B=11 H=17 N=23 T=29 Z=35
    ‘C=12 I=18 O=24 U=30
    ‘D=13 J=19 P=25 V=31
    ‘E=14 K=20 Q=26 W=32
    ‘F=15 L=21 R=27 X=33

  2. Muchísimas gracias, me ha ido de maravilla,
    eres un crack !

  3. Alejandro García

    Para los que tengáis un montón de números de cuenta a convertir en BBDD, os dejo la misma función en Transact-SQL.

    CREATE FUNCTION dbo.CCCToIBAN
    (
    @ccc as nvarchar(20)
    )
    RETURNS nvarchar(24)
    AS
    BEGIN
    declare
    @ok int = 0
    ,@j int = 0
    ,@iban nvarchar(24) = ”

    – Comprobar que CCC son 20 dígitos y todos numéricos
    if (LEN(@ccc) = 20)
    begin
    set @ok = 1
    while (@j < 20)
    begin
    if SUBSTRING(@ccc, @j+1, 1) in ('0','1','2','3','4','5','6','7','8','9')
    begin
    set @j = @j + 1
    end
    else
    begin
    set @ok = 0
    set @j = 20
    end
    end
    end

    if (@ok = 1)
    begin
    declare
    @ccc2 nvarchar(26)

    – para calcular el digito de control de IBAN hay que poner la iniciales del pais ES
    – E = 14 ; S = 28
    – y añadirselas al final del numero de cuenta mas 00
    set @ccc2 = @ccc + '142800'

    – Obtener el módulo 97 de @ccc2
    – Como no es posible manejar un entero de 26 dígitos, lo troceamos en 5 partes de 6 dígitos
    declare
    @r nvarchar(10) = ''
    ,@numero int = 0
    set @j = 0
    while @j < 5
    begin
    set @r = cast((cast((@r + SUBSTRING(@ccc2, ((@j * 6) + 1), 6)) as int) % 97) as nvarchar)
    set @j = @j + 1
    end

    – El dígito de control es el resultado de restarle a 98 el módulo 97 del @ccc2, con 2 dígitos
    declare @dc nvarchar(2) = cast((98 – cast(@r as int)) as nvarchar)
    if LEN(@dc) = 1 set @dc = '0' + @dc

    – Componemos el IBAN: 'ES' + dígito de control + ccc
    set @iban = 'ES' + @dc + @ccc
    end

    return @iban

    END
    GO

    Una vez creada la función en la base de datos, se pueden actualizar todos los números de cuenta a la vez
    Por ejemplo, en la tabla clientes hay un campo llamado ccc y hemos creado otro llamado iban. Para convertirlos todos usaremos el comando SQL:

    update clientes set iban = dbo.CCCToIBAN(ccc)

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

A %d blogueros les gusta esto: