Codigo Funcion Comprobar Digito Verificador Contenedores.

Tema en 'Programación & Programación Web' iniciado por Ragnarok8819, 21 Ago 2018.

  1. Ragnarok8819

    Ragnarok8819 Usuario Nuevo nvl. 1
    37/41

    Registrado:
    21 Oct 2011
    Mensajes:
    1
    Me Gusta recibidos:
    0
    Espero estar en el lugar correcto.

    Estoy buscando un código que se anexe a Microsoft Visual Basic y utilizarlo en excel que verifique eh indique si el numero es "correcto" o "incorrecto".

    Tal como sucede con el numero de RUT todo se basa en operaciones matematicas pero que al hacerlas de manera primitiva (multiples funciones que generen una operacion para un resultado final) vuelve extremadamente pesado el archivo.

    Encontre un codigo que tiene algun error, pero no manejo el programa. A ver si alguien entiende del tema.

    Function xxDigVerContainer()
    LPARAMETERS lcCont
    LOCAL lnDigito, lnSuma1, lnDigVer
    IF LEN(lcCont)#10 && no debe haber espacio entre las letras y los números
    RETURN -1 && si devuelve -1 es porque falló
    End If
    *
    lnSuma1 = 0
    For i = 1 To 10
    IF i>4
    lnDigito = Val(SUBSTR(lcCont, i, 1))
    Else
    lnDigito = Asc(SUBSTR(lcCont, i, 1)) - 55
    lnDigito = lnDigito + Int((lnDigito - 1) / 10)
    End If
    lnSuma1 = lnSuma1 + lnDigito * 2^(i-1)
    ENDFOR
    *
    lnDigVer = lnSuma1 - Int(lnSuma1 / 11) * 11
    RETURN lnDigVer && ojo, lo devuelve como número, no como carácter
    ENDFUN


    Slds.
     
  2. Stban2

    Stban2 Usuario Habitual nvl.3 ★
    112/163

    Registrado:
    15 Mar 2018
    Mensajes:
    2.361
    Me Gusta recibidos:
    1.486
    quieres hacer un valida rut? o quieres hacer un codigo de validacion de otro algoritmo, si es un validador de rut creo que tengo uno en vba, en un sistema de venta que hice en excel cuando estudiaba, lo que si la comprobacion de los datos yo la hacia en un formulario, y no desde la hoja de calculo.

    tratare de subir el codigo hoy en la noche o mañana del validador de rut.
     
  3. Stban2

    Stban2 Usuario Habitual nvl.3 ★
    112/163

    Registrado:
    15 Mar 2018
    Mensajes:
    2.361
    Me Gusta recibidos:
    1.486
    No encontre el codigo, jajaja disculpa pero extravie el archivo,

    mira esto lo hice en un editor de texto en definitiva debiese calcular el digito verificador y compararlo con el que recibes de parametro.


    ********************************************************************************************************
    ****variables utilizadas***************
    misuma, miresto, mifactor, eldigito, miresultado 'usadas para calculos en la funcion
    *****el parametro mantuve el mismo que venia en la funcion que escribiste tu. lcCont********

    misuma = 0 'variable para acumular el calculo del rut

    eldigito = mid(lcCont, 10, 1) 'obtiene el valor del digito de la cadena (parametro)

    mifactor =1 'se utiliza para multiflicar en ascenso de 2 a 7 se inicia en 1 ya que en el for se aumenta al entrar

    For i = 8 To 1 step -1
    mifactor = mifactor +1 'aumentamos el valor del factor

    if mifactor = 8 ' si es ocho lo devolvemos a 2
    mifactor = 2
    end if

    misuma = misuma + ((mid(lcCont, i,1)) * mifactor)
    End For

    miresto = misuma mod 11 ' obtenemos el resto de la operacion

    miresultado = 11- miresto 'obtenemos el valor para saber el dv

    if miresultado < 10
    midigito = miresultado
    else if miresultado = 10
    midigito = "k"
    else
    midigito = 0
    End
    IF midigito = eldigito
    'aca debes colocar que es lo que quieres obtener si el ingrersado es correcto
    else
    'aca si esta mal el numero
    end if


    ***********************************************************************************************
    el tema es que si siempre deberas ingresar rut con 10 numeros, en caso de que sean demenos de 10.000.000, deberas agregar un cero, lo ideal hubiese sido que el dv fuera aparte de manera de contar los caracteres

    espero te sirva, puede que algunas estructuras no esten bien ya que hace años que no hago nada en VBA.


    Espero te sirva.
     
  4. Stban2

    Stban2 Usuario Habitual nvl.3 ★
    112/163

    Registrado:
    15 Mar 2018
    Mensajes:
    2.361
    Me Gusta recibidos:
    1.486
    No encontre el codigo, jajaja disculpa pero extravie el archivo,

    mira esto lo hice en un editor de texto en definitiva debiese calcular el digito verificador y compararlo con el que recibes de parametro.


    ********************************************************************************************************
    ****variables utilizadas***************
    misuma, miresto, mifactor, eldigito, miresultado 'usadas para calculos en la funcion
    *****el parametro mantuve el mismo que venia en la funcion que escribiste tu. lcCont********

    misuma = 0 'variable para acumular el calculo del rut

    eldigito = mid(lcCont, 10, 1) 'obtiene el valor del digito de la cadena (parametro)

    mifactor =1 'se utiliza para multiflicar en ascenso de 2 a 7 se inicia en 1 ya que en el for se aumenta al entrar

    For i = 8 To 1 step -1
    mifactor = mifactor +1 'aumentamos el valor del factor

    if mifactor = 8 ' si es ocho lo devolvemos a 2
    mifactor = 2
    end if

    misuma = misuma + ((mid(lcCont, i,1)) * mifactor)
    End For

    miresto = misuma mod 11 ' obtenemos el resto de la operacion

    miresultado = 11- miresto 'obtenemos el valor para saber el dv

    if miresultado < 10
    midigito = miresultado
    else if miresultado = 10
    midigito = "k"
    else
    midigito = 0
    End
    IF midigito = eldigito
    'aca debes colocar que es lo que quieres obtener si el ingrersado es correcto
    else
    'aca si esta mal el numero
    end if


    ***********************************************************************************************
    el tema es que si siempre deberas ingresar rut con 10 numeros, en caso de que sean demenos de 10.000.000, deberas agregar un cero, lo ideal hubiese sido que el dv fuera aparte de manera de contar los caracteres

    espero te sirva, puede que algunas estructuras no esten bien ya que hace años que no hago n


    Espero te sirva.
     
  5. Stban2

    Stban2 Usuario Habitual nvl.3 ★
    112/163

    Registrado:
    15 Mar 2018
    Mensajes:
    2.361
    Me Gusta recibidos:
    1.486
    revisa si te sirve.
     
  6. cavoso

    cavoso Usuario Casual nvl. 2
    37/41

    Registrado:
    31 May 2008
    Mensajes:
    2.792
    Me Gusta recibidos:
    14
    Insertar CODE, HTML o PHP:
    Public Shared Function ValidarRut(ByVal rut As String, ByVal ver As String) As Boolean
                Try
                    Dim Digito As Integer
                    Dim Contador As Integer
                    Dim Multiplo As Integer
                    Dim Acumulador As Integer
                    Dim Verificador As String
                    rut = rut.Replace(".", "")
                    Contador = 2
                    Acumulador = 0
                    While rut <> 0
                        Multiplo = (rut Mod 10) * Contador
                        Acumulador = Acumulador + Multiplo
                        rut = rut \ 10
                        Contador = Contador + 1
                        If Contador > 7 Then
                            Contador = 2
                        End If
                    End While
                    Digito = 11 - (Acumulador Mod 11)
                    If Digito = 10 Then
                        Verificador = "k"
                    ElseIf Digito = 11 Then
                        Verificador = "0"
                    Else
                        Verificador = Digito
                    End If
    
                    If ver = Verificador Then
                        Return True
                    Else
                        Return False
                    End If
                Catch ex As Exception
                    Return False
                End Try
            End Function
    listo, ahí tienes el que yo uso siempre
     
    A BustaRhymes le gusta esto.