** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Tus Funciones Favoritas & Aportaciones & Artí­culos
  Mensajes nuevos Mensajes nuevos RSS - VBA: Digito de control DCC (España)
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoVBA: Digito de control DCC (España)

 Responder Responder
Autor
Mensaje
admin Ver desplegable
Administrador
Administrador
Avatar

Unido: 14/Agosto/2013
Localización: Cualquier lugar
Estado: Sin conexión
Puntos: 790
Enlace directo a este mensaje Tema: VBA: Digito de control DCC (España)
    Enviado: 14/Agosto/2013 a las 14:10
Emilio Sancha hacia 2004


Esta otra función verifica el digito de control DCC de las cuentas corrientes (España)

'*******************************************************************************

'* VerificaDigitoControl

'* Verifica el digito de control del número pasado como argumento (CCC: Código

'* Cuenta Cliente)

'* basado en normas y procedimientos bancarios de la ASOCIACION ESPAÑOLA DE BANCA

'* cuaderno 19)

'* Argumentos: strNumero => cadena de veinte números que representa el par

'*                          entidad-Oficina, los dos digitos de control y el

'*                          número de cuenta corriente

'* uso: if VerificaDigitoControl "00720101930000122351" then

'* ESH 04/12/03 19:10

'*******************************************************************************

 

 

Public Function VerificaDigitoControl(strNumero As String) As Boolean

   

    ' pesos de los distintos digitos del CCC

    Const Unidad = 6

    Const Decena = 3

    Const Centena = 7

    Const UnidadMillar = 9

    Const DecenaMillar = 10

    Const CentenaMillar = 5

    Const UnidadMillon = 8

    Const DecenaMillon = 4

    Const CentenaMillon = 2

    Const Millardo = 1

   

    Dim lngTotal As Long, _

    bytDigitoControl As Byte

   

    On Error GoTo VerificaDigitoControl_TratamientoErrores

   

    ' Para la obtención de cada uno de ellos, se utiliza el módulo 11:

    ' la suma de los productos obtenidos al multiplicar cada una de las

    ' cifras componentes de los elementos por los pesos asignados, se

    ' divide entre 11; el resto de tal división se deduce de 11,

    ' cuyo resultado es el dígito de control, con las excepciones

    ' siguientes: si fuese 10, se considerará 1, y si fuera 11, cero.

   

    VerificaDigitoControl = True

   

    ' primero compruebo el par entidad / oficina

    lngTotal = Mid(strNumero, 8, 1) * Unidad + _

               Mid(strNumero, 7, 1) * Decena + _

               Mid(strNumero, 6, 1) * Centena + _

               Mid(strNumero, 5, 1) * UnidadMillar + _

               Mid(strNumero, 4, 1) * DecenaMillar + _

               Mid(strNumero, 3, 1) * CentenaMillar + _

               Mid(strNumero, 2, 1) * UnidadMillon + _

               Mid(strNumero, 1, 1) * DecenaMillon

    bytDigitoControl = 11 - (lngTotal Mod 11)

   

    If bytDigitoControl = 11 Then

        bytDigitoControl = 0

    ElseIf bytDigitoControl = 10 Then

        bytDigitoControl = 1

    End If

   

    ' si el digito de control de oficina no es correcto

    If bytDigitoControl <> Mid(strNumero, 9, 1) Then VerificaDigitoControl = False

   

    ' luego el número de cuenta

    lngTotal = Mid(strNumero, 20, 1) * Unidad + _

               Mid(strNumero, 19, 1) * Decena + _

               Mid(strNumero, 18, 1) * Centena + _

               Mid(strNumero, 17, 1) * UnidadMillar + _

               Mid(strNumero, 16, 1) * DecenaMillar + _

               Mid(strNumero, 15, 1) * CentenaMillar + _

               Mid(strNumero, 14, 1) * UnidadMillon + _

               Mid(strNumero, 13, 1) * DecenaMillon + _

               Mid(strNumero, 12, 1) * CentenaMillon + _

               Mid(strNumero, 11, 1) * Millardo

   

    bytDigitoControl = 11 - (lngTotal Mod 11)

   

    If bytDigitoControl = 11 Then

        bytDigitoControl = 0

    ElseIf bytDigitoControl = 10 Then

        bytDigitoControl = 1

    End If

   

    ' si el digito de control de cuenta no es correcto y según si lo era o no

    ' el de oficina muestro un mensaje

    If bytDigitoControl <> Mid(strNumero, 10, 1) Then VerificaDigitoControl = False

   

    ' si alguno de los dos ha fallado muestro un mensaje

    If Not VerificaDigitoControl Then Call MsgBox("El CCC " & strNumero & " pasado no es correcto, por favor verifiquelo", vbCritical Or vbSystemModal, "ATENCION")

   

VerificaDigitoControl_Salir:

    On Error GoTo 0

    Exit Function

   

VerificaDigitoControl_TratamientoErrores:

   

    MsgBox "Error " & Err.Number & " en proc. VerificaDigitoControl de Módulo DigitosControlCCC (" & Err.Description & ")", vbOKOnly + vbCritical

    GoTo VerificaDigitoControl_Salir

   

End Function            ' VerificaDigitoControl

Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable