Codigo Funcion Comprobar Digito Verificador Contenedores.

Ragnarok8819

Usuario Nuevo nvl. 1
21 Oct 2011
1
0
1
NULL
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.
 
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.
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.
 
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.
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.
 
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.
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.
 
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.
revisa si te sirve.
 
Código:
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
 
  • Like
Reacciones: BustaRhymes