Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   Cocina Casera (https://www.cobolforo.es/forumdisplay.php?f=47)
-   -   Gerar Serial Number (https://www.cobolforo.es/showthread.php?t=882)

Paulo 31 de agosto de 2018 09:51

Gerar Serial Number
 
Olá a todos.
Alguém tem ou pode indicar uma rotina para gerar um numero de série a partir de uma string ?
Gracias

Joseg 31 de agosto de 2018 16:40

Cita:

Citación del post de Paulo (Mensaje 4451)
Olá a todos.
Alguém tem ou pode indicar uma rotina para gerar um numero de série a partir de uma string ?
Gracias

O que eu já fiz:
Achar o valor decimal de cada caractere da string, multiplicar por por um numero fixo ou pela data.
mas há muitas outras formas, tudo depende da complexidade que se quer por nesse numero de série e qual o objectivo.
Num caso concreto o resultado da string multipliquei pelo numero de série do disco rígido.

Se o objectivo é segurança ainda se pode fazer algo do tipo:
Código COBOL:
  1. 01 b x(100).
  2. .
  3. .
  4. .
  5. inspect b converting
  6. "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" to
  7. "BCDEFGHIJKLMNOPQRSTUVWXYZ0123456789A"


Jose Manuel

Fito 31 de agosto de 2018 22:19

Hola:

Tambien podes redefinir el string y hacer distintos cálculos para encontrar una clave, que cuando la quieras controlar volves a realizar la misma rutina y comparar si te da el mismo resultado.

Código COBOL:
  1. 01  nombre                   pic x(100).
  2. 01  redefines nombre.
  3.     02 letra                 pic 9999 comp-4 occurs 100 times
  4. 01  suma                     pic 9(8).
  5. 01  ii                       pic 999.

Por ejemplo podrías hacer una rutina parecida a ésta:

Código COBOL:
  1.      move zeros           to suma.
  2.      perform varying ii from 1 by 2 until ii > 100
  3.         compute suma = suma + letra(ii) + (ii / 6)
  4.      end-perform.
  5.      perform varying ii from 2 by 2 until ii > 100
  6.         compute suma = suma + letra(ii) + (ii / 3)
  7.      end-perform.

Cualquier tipo de cálculo, para el caso es lo mismo. Y te va a dar un valor en la variable "suma" que es la que tenés como serial.

Saludos.


Fito...

Kuk 1 de septiembre de 2018 09:59

Joseg, yo en tu versión haría algo así:

Código COBOL:
  1.  inspect b converting
  2.      "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" to
  3.      "HC79QWH8J52IBOZFRST6VGXYP01L34KUDMEA"

Pero además hay un punto, que es que los literales de guardan en el binario/ejecutable tal cual. Es decir, con un editor hexadecimal se podría fácilmente extraer las correspondencias.

Para que esto no pase, habría que construir cada "churro" vía cálculos, algo tipo esto:

Código COBOL:
  1.      01  CHURRO-1                PIC X(37).
  2.      01  CHAR                    PIC X(2).
  3.      01  BYTE REDEFINES CHAR     PIC 9(2) COMP-5.
  4.      
  5.      PROCEDURE DIVISION.
  6.      
  7.          MOVE 1 TO IDX-1
  8.          
  9.          ADD 21 TO 20 GIVING BYTE
  10.          
  11.          PERFORM UNTIL IDX-1 > 37
  12.              MOVE BYTE TO CHURRO-1(IDX-1:1)
  13.              
  14.              ADD 1 TO IDX-1 BYTE
  15.              
  16.              IF  BYTE > H"5A"
  17.                  MOVE H"30" TO BYTE
  18.              END-IF
  19.          END-PERFORM

Y lo mismo para el "churro-2", pero con cálculo individual para cada posición.

Paulo 4 de septiembre de 2018 14:58

Vou testar os vossos exemplos e ver qual o que melhor se adequa ao que pretendo, que é uma chave relativamente simples.
Gracias


La franja horaria es GMT +2. Ahora son las 14:45.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.