Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Fujitsu COBOL PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] ADO-CONNECT-STRING Breew PowerCOBOL (ActiveX, v4 - v11) 0 24 de abril de 2022 11:23
[Sintaxis] Convertir DECIMAL a NUMERO para COBOL Dasije WinDev 0 11 de agosto de 2019 23:44
[Sintaxis] Tipo de dato decimal en mysql... Fito PowerCOBOL (ActiveX, v4 - v11) 8 4 de mayo de 2018 14:54
[Herramienta] DECIMAL-POINT IS COMMA en Cobview Gatomalo COBOL - General 1 3 de mayo de 2018 05:06
[Sintaxis] Duda sobre STRING e INSPECT Anthony AcuCobol 2 9 de abril de 2015 20:18

Respuesta
 
Herramientas

  #11
Antiguo 22 de enero de 2026, 18:05
Joseg
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Innovación: Por aportar innovaciones - Issue reason: Por aportar soluciones innovadoras en varias ocasiones 
Última Actividad 17.09.2026 18:23
Posts Posts: 401
Likes enviados Enviados: 130
Likes recibidos Recibidos: 179

Citación del post de Joseg Ver Mensaje
"Es que estábamos tontos macho, con la SUMA no vale, y lo sabemos desde el cole"

Agora si !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!

Muitas muitas gracias Kuk
Tengo un problema con este cálculo, y ahora es grave, porque ya hay muchos registros creados.

La suma de la cadena "207.99.99;" es igual a "247.97.99;".

Mi resultado: "000151790274229935".

Mi objetivo es que sea diferente. ¿Hay alguna alternativa?

Gracias,
José
Joseg is offline   Responder Con Cita
  #12
Antiguo 22 de enero de 2026, 21:55
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Joseg, nunca he sido un crack de las formulas y algoritmos la verdad, pero me acabo de dar cuenta de otra cosa que sabemos desde el cole y se nos ha escapado...

El cálculo lo hacemos así:

Código COBOL:
  1.      COMPUTE wsomamodelos = wsomamodelos + byte(idx-1) * idx-1

De esta manera, primero se hace la multiplicación.

Si lo hacemos así, con paréntesis, para que primero se haga la suma:
Código COBOL:
  1.      COMPUTE wsomamodelos = (wsomamodelos + byte(idx-1)) * idx-1

Entonces a mi me da 2 valores diferentes:
Código:
207.99.99;  --> 759816616914665856
247.97.99;  --> 257135248213769984



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #13
Antiguo 22 de enero de 2026, 22:39
Joseg
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Innovación: Por aportar innovaciones - Issue reason: Por aportar soluciones innovadoras en varias ocasiones 
Última Actividad 17.09.2026 18:23
Posts Posts: 401
Likes enviados Enviados: 130
Likes recibidos Recibidos: 179

Citación del post de Kuk Ver Mensaje
@Joseg, nunca he sido un crack de las formulas y algoritmos la verdad, pero me acabo de dar cuenta de otra cosa que sabemos desde el cole y se nos ha escapado...

El cálculo lo hacemos así:

Código COBOL:
  1.      COMPUTE wsomamodelos = wsomamodelos + byte(idx-1) * idx-1

De esta manera, primero se hace la multiplicación.

Si lo hacemos así, con paréntesis, para que primero se haga la suma:
Código COBOL:
  1.      COMPUTE wsomamodelos = (wsomamodelos + byte(idx-1)) * idx-1

Entonces a mi me da 2 valores diferentes:
Código:
207.99.99;  --> 759816616914665856
247.97.99;  --> 257135248213769984
Ahhhhhhh, ok, ok,

Muchas gracias, Kuk. Cambiaré la fórmula. Sin embargo, chatGTP sugirió este ejemplo, lo que garantiza que siempre funciona, independientemente del orden de los dígitos/caracteres.

Código COBOL:
  1.        DATA DIVISION.
  2.        WORKING-STORAGE SECTION.
  3.        01 WS-TEXTO        PIC X(50)
  4.            VALUE "207.99.99;247.97.99;".
  5.        01 WS-CODE         PIC 9(9) VALUE 0.
  6.        01 WS-ASCII        PIC 9(3).
  7.        01 I               PIC 9(3).
  8.  
  9.        PROCEDURE DIVISION.
  10.            MOVE 0 TO WS-CODE
  11.  
  12.            PERFORM VARYING I FROM 1 BY 1
  13.              UNTIL I > FUNCTION LENGTH(WS-TEXTO)
  14.                COMPUTE WS-ASCII = FUNCTION ORD(WS-TEXTO(I:1))
  15.                COMPUTE WS-CODE = (WS-CODE * 31) + WS-ASCII
  16.                COMPUTE WS-CODE = FUNCTION MOD(WS-CODE, 999999999)
  17.            END-PERFORM
  18.  
  19.            DISPLAY "CODIGO = " WS-CODE
Joseg is offline   Responder Con Cita
  #14
Antiguo 24 de enero de 2026, 20:44
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Citación del post de Joseg Ver Mensaje
chatGTP sugirió
Yo no me fiaría en este tipo de cosas

Miniatura de Adjuntos
Pulsar la imagen para la versión amplia
Nombre:  IA_Setas.PNG
Vistas: 64
Tamaño:  1.016,6 KB  



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #15
Antiguo 19 de marzo de 2026, 13:42
Joseg
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Innovación: Por aportar innovaciones - Issue reason: Por aportar soluciones innovadoras en varias ocasiones 
Última Actividad 17.09.2026 18:23
Posts Posts: 401
Likes enviados Enviados: 130
Likes recibidos Recibidos: 179

Citación del post de Kuk Ver Mensaje
Yo no me fiaría en este tipo de cosas
Hola Kuk, esto no es fácil.

El cliente detectó otro error. Los códigos:
105.02.11 y 115.01.11
dan el mismo valor: 298955437302929664.
Creo que hay que tener en cuenta la posición en la que se introducen los dígitos. ¿Puedes ayudarme?

Gracias
Jose
Joseg is offline   Responder Con Cita
  #16
Antiguo 20 de marzo de 2026, 10:17
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

@Joseg, para no reinventar la rueda, vamos a optar por soluciones estándar, como es el caso de OpenSSL: https://es.dll-files.com/libcrypto.dll.html

Con esta solución generamos un HASH, en el caso concreto, el SHA256:
Código COBOL:
  1.  ENVIRONMENT     DIVISION.
  2.  DATA            DIVISION.
  3.  WORKING-STORAGE SECTION.
  4.  01  strInput    PIC X(3000).  
  5.      
  6.  01  LK-HASH-RAW       PIC X(32).
  7.  
  8.  01  hLib        PIC S9(9) COMP-5.
  9.  01  ptrSHA256   PROCEDURE-POINTER.
  10.  01  ptrINPUT    POINTER.
  11.  01  nPtrINPUT REDEFINES ptrINPUT PIC S9(9) COMP-5.
  12.  
  13.  01  strLen      PIC S9(9) COMP-5.
  14.  
  15.  
  16. *-----------------------------------
  17.  01  LNK-LEN                      PIC 9(4) COMP.
  18.  01  LNK-INPUT.
  19.      05  FILLER PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  20.  
  21.  01  LNK-OUTPUT.
  22.      05  LNK-HEX1.
  23.          10  LNK-H1 PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  24.      05  LNK-HEX2.
  25.          10  LNK-H2 PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  26.      
  27.  PROCEDURE       DIVISION.
  28.      
  29.      MOVE POW-TEXT OF CmText1 TO strInput
  30.      
  31.      CALL "LoadLibraryA" WITH STDCALL USING BY CONTENT "libcrypto.dll" RETURNING hLib
  32.      
  33.      CALL "GetProcAddress" WITH STDCALL USING BY VALUE hLib, BY CONTENT "SHA256" & X"00" RETURNING ptrSHA256
  34.      
  35.      MOVE FUNCTION ADDR(strInput) TO ptrINPUT
  36.      
  37.      COMPUTE strLen = FUNCTION STORED-CHAR-LENGTH(strInput)
  38.      
  39.      CALL ptrSHA256 WITH STDCALL USING
  40.         BY VALUE     nPtrINPUT
  41.         BY VALUE     strLen
  42.         BY REFERENCE LK-HASH-RAW
  43.      
  44.      COMPUTE LNK-LEN = FUNCTION STORED-CHAR-LENGTH(LK-HASH-RAW)
  45.      MOVE LK-HASH-RAW TO LNK-INPUT
  46.      
  47.      CALL "HEX" USING LNK-LEN, LNK-INPUT, LNK-OUTPUT
  48.      
  49.      MOVE LNK-OUTPUT TO POW-TEXT OF CmText3  

Tienes que crear una nueva PROCEDURE y llamarla HEX, su contenido es el siguiente:
Código COBOL:
  1.  ENVIRONMENT DIVISION.
  2.  DATA DIVISION.
  3.  
  4.  WORKING-STORAGE SECTION.
  5.  01  IDX-1                        PIC S9(4)  COMP-5.
  6.  01  IDX-S                        PIC S9(4)  COMP-5.
  7.  
  8.  01  TBL-HEX                      PIC X(16) VALUE "0123456789ABCDEF".
  9.  
  10.  01  WS-HEX-1                     PIC S9(4)  COMP-5.
  11.  01  WS-HEX-2                     PIC S9(4)  COMP-5.
  12.  
  13.  01  WS-BIN                       PIC X.
  14.  01  WS-BIN-2 REDEFINES WS-BIN    PIC 9(2) COMP-5.
  15.    
  16. ******************************************************************
  17. *                      LINKAGE SECTION                           *
  18. ******************************************************************
  19.  LINKAGE SECTION.
  20.  01  LNK-LEN                      PIC 9(4) COMP.
  21.  01  LNK-INPUT.
  22.      05  FILLER PIC X OCCURS 1 TO 1000 DEPENDING ON LNK-LEN.
  23.  
  24.  01  LNK-OUTPUT PIC X(2000).
  25.  
  26. ******************************************************************
  27. *                       PROCEDURE DIVISION
  28. ******************************************************************
  29.  PROCEDURE DIVISION USING LNK-LEN, LNK-INPUT, LNK-OUTPUT.
  30.      
  31.      MOVE 1 TO IDX-1, IDX-S
  32.      
  33.      PERFORM UNTIL IDX-1 > LNK-LEN
  34.          MOVE LNK-INPUT(IDX-1:1) TO WS-BIN
  35.          
  36.          DIVIDE WS-BIN-2 BY 16
  37.              GIVING WS-HEX-1 REMAINDER WS-HEX-2
  38.          
  39.          ADD 1 TO WS-HEX-1, WS-HEX-2
  40.          
  41.          MOVE TBL-HEX(WS-HEX-1:1) TO LNK-OUTPUT(IDX-S:1)
  42.          ADD 1 TO IDX-S
  43.          MOVE TBL-HEX(WS-HEX-2:1) TO LNK-OUTPUT(IDX-S:1)
  44.              
  45.          ADD 1 TO IDX-1, IDX-S
  46.      END-PERFORM
  47.      
  48.      GOBACK
  49.      .

No olvides lo de ALPHAL(WORD) e incluir la KERNEL32.LIB.

Resultados:
Valorsha256
105.02.1145A5AC763720497A3054E1A5C1C24DB458CE0C30 79F9AD2AB9496EAF9EAC087B
115.01.112B83108827E847A74B0886AB2E532E3F79988131 A61546499C3B08F32E4DB9F5
207.99.998189CCD84246547FD968902606574828E03D332D 2A9D65D9FCA11868303CA8B9
247.97.99D9DCC2614B2499CCEEF96484C65855258D7CD2AF 8DEA2E5079C7F13860D9C323


¡¡¡Esto ya NO PUEDE fallar!!!
Archivos Adjuntos
Tipo de Archivo: zip libcrypto.zip (720,2 KB)Descargas: 13



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #17
Antiguo 20 de marzo de 2026, 12:52
Joseg
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Innovación: Por aportar innovaciones - Issue reason: Por aportar soluciones innovadoras en varias ocasiones 
Última Actividad 17.09.2026 18:23
Posts Posts: 401
Likes enviados Enviados: 130
Likes recibidos Recibidos: 179

Kuk,
Muchas gracias por tu trabajo. Creo que esta es una solución más sólida que podría interesar al resto de la comunidad.

Ya la he probado y parece funcionar bien.


Citación del post de Kuk Ver Mensaje
@Joseg, para no reinventar la rueda, vamos a optar por soluciones estándar, como es el caso de OpenSSL: https://es.dll-files.com/libcrypto.dll.html
Joseg is offline   Responder Con Cita
Respuesta



Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:07.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.