Algoritmo Modulo 11

Algoritmo Modulo 11

Postby acuellar » Wed Mar 22, 2023 11:56 am

Buenas estimados

Por me ayudan a convertir éste código a Fivewin

Code: Select all  Expand view  RUN

public String calculaDigitoMod11(String cadena, int numDig, int limMult, boolean x10)

{
int mult, suma, i, n, dig;
if (!x10) numDig = 1;
for(n = 1; n <= numDig; n++) {
   suma = 0;
   mult = 2;
   for(i = cadena.length() - 1; i >= 0; i--) {
   suma += (mult * Integer.parseInt(cadena.substring(i, i + 1)));
   if(++mult > limMult) mult = 2;
     }
   if (x10) {
     dig = ((suma * 10) % 11) % 10;
     }
   else {
    dig = suma % 11;
   }                  
             if (dig == 10) {
                    cadena += "1";
             }
             if (dig == 11) {
                    cadena += "0";
             }
             if (dig < 10) {
                    cadena += String.valueOf(dig);
             }    
}
    return cadena.substring(cadena.length() - numDig, cadena.length());

}
 

Ejemplo de consumo del método:
Code: Select all  Expand view  RUN

  public String obtenerModulo11(String pCadena) {
    String vDigito = calculaDigitoMod11(pCadena, 1, 9, false);
     return vDigito;
}
 


Gracias por la ayuda
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Algoritmo Modulo 11

Postby wilsongamboa » Wed Mar 22, 2023 1:41 pm

buenos dias mejor escribela en HB aca un ejemplo

Code: Select all  Expand view  RUN

****************************************************************************
*  calculo del modulo 11 para cualquier valor numerico o de caracteres
*  acepta caracteres o numeros enteros
*  este tiene dos excepciondes para el sri
*  si el digito verificador es 11 se le pone como 0
*  si el digito verificador es 10 se le pone como 1
*  Copyright Wilson 'W' Gamboa A
*  Fecha de creación          : 26 de Marzo del 2014
*  Fecha ultima Modificación  : 26 de Marzo del 2014
*  Parte del proyecto fe
****************************************************************************

function wg_modulo11( Num )

    local cNum := if ( valtype( Num ) == 'C', alltrim( Num ), alltrim( str( int( Num ) ) ) )
    local nLen := len( cNum )
    local i
    local cCar
    local nCar
    local Cnt  := 0
    local aMulti := { 2, 3, 4, 5, 6, 7}
    local nDigitoMul
    local nSub
    local nSuma := 0
    local nDigitoVerificador
    local aResult := {}
    local nCount  := nLen

    while nCount > 0
        i    = nCount
        cCar = substr( cNum, i, 1 )
        ncar = val( cCar )
        ++Cnt
        if Cnt > 6
            Cnt = 1
        end
        nDigitoMul = aMulti[ Cnt ]
        nSub       = ncar * nDigitoMul
        nSuma      += nSub
        nCount --
        /*
        aadd( aResult , ' i = ' + alltrim( str( i ) ) + ' cCar = ' + cCar + ' dig mult= ' + str( nDigitoMul,1 ) )
        */

    end

    nMod = int ( nSuma % 11 )

    nDigitoVerificador = 11 - nMod

    //OJO alteración para el SRI

    if nDigitoVerificador == 11
        nDigitoVerificador = 0
    end

    if nDigitoVerificador == 10
        nDigitoVerificador = 1
    end

/*
        aadd( aResult , ' sub = ' + alltrim( str( nSuma ) ) )
        aadd( aResult , ' mod = ' + alltrim( str( nMod ) ) )
        aadd( aResult , ' dig = ' + alltrim( str( nDigitoVerificador ) ) )

    achoice( 1, 2, 15, 40, aResult )

*/



Return nDigitoVerificador
 
Wilson 'W' Gamboa A
Wilson.josenet@gmail.com
User avatar
wilsongamboa
 
Posts: 595
Joined: Wed Oct 19, 2005 6:41 pm
Location: Quito - Ecuador

Re: Algoritmo Modulo 11

Postby acuellar » Wed Mar 22, 2023 2:50 pm

Muchas gracias estimado Wilson

Funcionó perfecto.
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1643
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 31 guests