Bloquear sistema

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
fauze
Usuário Nível 1
Usuário Nível 1
Mensagens: 9
Registrado em: 16 Abr 2007 14:57
Localização: Londrina - Pr

Bloquear sistema

Mensagem por fauze »

Olá pessoal,

Tenho um sistema de controle de estoque, onde cobro uma manutenção dos meus clientes, gostaria de ter uma rotina que bloqueasse o sistema quando o cliente não pagar em dia.
Alguém tem uma sugestão para eu fazer isso?
Avatar do usuário
Eolo
Colaborador
Colaborador
Mensagens: 1134
Registrado em: 08 Dez 2005 18:24
Localização: São Paulo - SP

Bloquear sistema

Mensagem por Eolo »

Um jeito simples é usar um TXT em conjunto com o EXE. Um exemplo, que vc pode adaptar às suas necessidades:

1. crie uma variável no EXE, que vai ser o número serial dele, tipo SERIAL:='085010' (cliente número 085, EXE número 010).

2. no TXT, grave a string "0850101509113", encriptada de alguma forma, onde:
.085 = cliente
.010 = EXE
.150911 = vencimento
.3 = dígito de controle EAN13

3. o EXE, ao ser iniciado:
a) se o TXT não existir, QUIT.
b) se o TXT existir, lê e desencripta a string, confere o EAN13. Se EAN13 estiver errado, alguém mexeu no TXT. QUIT.
c) se EAN13 ok, confere o SERIAL. Se não for '085 010', compilado no EXE, QUIT.
d) se o vencimento for menor que date(), QUIT.
e) se o cliente pagou em dia, o TXT tá atualizado (vencimento futuro) e o EXE continua rodando.

4. A atualização do TXT, quando o cliente pagar, pode ser de várias maneiras, como por ex:
- vc gera um novo TXT e manda por email
- vc vai no cliente pegar a verba e transfere o novo TXT do seu pendrive pro PC.
- faz o EXE buscar o TXT atualizado em seu FTP (se houver).
- vc passa o código por telefone: o cliente roda uma opção no programa, a qual abre um SAY '085010" e um GET para ele entrar o novo vencimento e o EAN13 (encriptados). Essa rotina desencripta o que foi digitado, confere o EAN13 e, se estiver tudo ok, atualiza o TXT.

Do seu lado, é só vc criar um EXE pra gerar e guardar esses códigos encriptados.

Anexo, uma função que fiz pra encriptar strings (que só contenham A/Z e 0/9), sem limite de tamanho. Usei só letras minúsculas pra não confundir 0/0 (zero e "O"), 1/l (um e "L"), etc.

Exemplo:
mix("0850101509113","F") -> "34vnqfkg82h82"
mix("34vnqfkg82h82","A") -> "0850101509113"

mix("0850101609110","F") -> "0aitw50c6tz6t"
mix("0aitw50c6tz6t","A") -> "0850101609110"

Código: Selecionar todos

FUNCTION mix(quem,aaaa)
priv chave,t,cripto,x,y,chave2
chave="hda7f1gi2kj8qmbn3oerp4sz9uv5wcxt0y6"
if aaaa="F"
  t=""
  for x=len(quem) to 1 step -1
    t=t+substr(quem,x,1)
  next
  quem=t
  cripto=substr(quem,1,1)
  for x=1 to (len(quem)-1)
    y=at(right(cripto,1),chave)
    chave2=substr(chave,y,len(chave))+substr(chave,1,y-1)
    y=at(substr(quem,x+1,1),chave)
    cripto=cripto+substr(chave2,y,1)
  next
elseif aaaa="A"
  cripto=""
  for x=(len(quem)-1) to 1 step -1
    y=at(substr(quem,x,1),chave)
    chave2=substr(chave,y,len(chave))+substr(chave,1,y-1)
    y=at(substr(quem,x+1,1),chave2)
    cripto=substr(chave,y,1)+cripto
  next
  cripto=substr(quem,1,1)+cripto
  t=""
  for x=len(cripto) to 1 step -1
    t=t+substr(cripto,x,1)
  next
  cripto=t
endi
retu cripto
Responder