Ver la Versión Completa : Gerar Serial Number
Paulo
31 de agosto de 2018, 09:51
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
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:
01 b x(100).
.
.
.
inspect b converting
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" to
"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.
01 nombre pic x(100).
01 redefines nombre.
02 letra pic 9999 comp-4 occurs 100 times
01 suma pic 9(8).
01 ii pic 999.
Por ejemplo podrías hacer una rutina parecida a ésta:
move zeros to suma.
perform varying ii from 1 by 2 until ii > 100
compute suma = suma + letra(ii) + (ii / 6)
end-perform.
perform varying ii from 2 by 2 until ii > 100
compute suma = suma + letra(ii) + (ii / 3)
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í:
inspect b converting
"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" to
"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:
01 CHURRO-1 PIC X(37).
01 CHAR PIC X(2).
01 BYTE REDEFINES CHAR PIC 9(2) COMP-5.
PROCEDURE DIVISION.
MOVE 1 TO IDX-1
ADD 21 TO 20 GIVING BYTE
PERFORM UNTIL IDX-1 > 37
MOVE BYTE TO CHURRO-1(IDX-1:1)
ADD 1 TO IDX-1 BYTE
IF BYTE > H"5A"
MOVE H"30" TO BYTE
END-IF
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
vBulletin v3.8.7, Derechos ©2000-2026, Jelsoft Enterprises Ltd.