jueves, 23 de enero de 2014

Función VB.NET que devuelve o valida el IBAN


Con la nueva normativa las empresas tienen que añadir el código IBAN a sus cuentas bancarias. Bueno, pues esta función te calcula el IBAN y lo devuelve, para por ejemplo validarlo o sustituir las cuentas en tu base de datos. La normativa para el cálculo del IBAN la puedes consultar aquí.

Primero fuí a lo sencillo utilizando la funcion Mod de visual basic que te devuelve el resto de una división, pero no funciona. Entonces hay que hacerlo como en la validación, cogiendo porciones de la cuenta.

Os la comparto, porque lo busqué en internet hasta la saciedad y no encontré nada que me sirviera. Y como opino que hay que compartir el conocimiento, espero que os sirva y os ahorre trabajo.

Tener en cuenta que yo solo uso cuentas bancarias de mi país, por eso añado al final de la cuenta "142800" y en el return el "ES" cada cual que ponga el suyo.

LLamada a la función:

Cuenta = cadena de cuenta bancaria + "142800" (por ser España)

DimeIBAN(Cuenta)

Función:

Private Function DimeIBAN(ByVal NumeroCuenta As String) As String

Dim ParteCuenta As String     
Dim ProximosNumeros As Integer

'Módulo de los primeros 9 digitos
ParteCuenta = String.Format("{0:00}", CInt(NumeroCuenta.Substring(0, 9)) Mod 97) 

' Cogemos otro grupo de digitos de la cuenta
NumeroCuenta = NumeroCuenta.Substring(9, NumeroCuenta.Length - 9)

' Recorremos la cuenta hasta el final
While NumeroCuenta <> ""

       If CInt(ParteCuenta) < 10 Then

           ProximosNumeros = 8
       Else

           ProximosNumeros = 7
      End If

      If NumeroCuenta.Length < ProximosNumeros Then

            ParteCuenta = ParteCuenta & NumeroCuenta
            NumeroCuenta = ""

      Else

           ParteCuenta = ParteCuenta & NumeroCuenta.Substring(0, ProximosNumeros)

           NumeroCuenta = NumeroCuenta.Substring(ProximosNumeros, NumeroCuenta.Length - ProximosNumeros)

      End If

     ParteCuenta = String.Format("{0:00}", ParteCuenta Mod 97)

End While

Return "ES" & String.Format("{0:00}", 98 - ParteCuenta)

End Function


Devuelve:

ESXX12345678901234567890


Tabla conversión de letras a números
Image

Nota: Ni que decir tiene que esta misma función sirve para comprobar que un iban es correcto, para no tocar la función, habría que pasar como parámetro la parte correspondiente a la cuenta. Así nos devolvería la IBAN completa.

--------------------------------------------------------------------------------------
Escoger un camino significaba abandonar otros. (Paulo Coelho)

4 comentarios:

  1. Respuestas
    1. Hola Antonio,
      Te agradezco el comentario. Es de bien nacidos ser agradecidos, nos decían a los que tenemos unos años.

      Un cordial saludo.

      Eliminar
  2. Pues si, muchas gracias por compartir tu conocimiento! Necesitamos mas gente como tu!

    ResponderEliminar
    Respuestas
    1. Gracias compañero.
      Realmente hay muchas personas que comparten sus conocimientos. Todos nos beneficiamos de ello, y es de agradecer.
      Esta es mi forma de aportar mi granito de arena y devolver en pequeña media algo de lo que recibo. Esta función, me consta que está siendo útil por el número de visitas, me alegro que te haya sido útil.
      Gracias

      Eliminar