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.
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.
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.
Code: 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