Auntenticação de pagamentos

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Auntenticação de pagamentos

Mensagem por Pablo César »

Alguem teria alguma sugestão para fazer uma espécie de autenticação para ser impresso quando um CAIXA recebe o pagamento de uma conta e autentica um boleto (por exemplo). Eu pensei em imprimir uma espécie de logotipo da empresa. Eu sei que qualquer coisa que você eu fizer será passível de falsificação. Há muito tempo a trás tinha visto um logotipo do TOYA que fazia impressão em impressoras matriciais e era feito ponto a ponto (em bits, creio eu).

Lí num FORUM que aconselhava gerar um código no programa que valide o pagamento, algum calculo relacionado com data do pagamento com o código do sacado e um dígito verificador do cálculo.

Se alguém puder mandar uma sugestão eu agradeceria.

Um clip-abraço :)Pos
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

Eu acabei encontrando o fonte e desejo compartir, mas ainda acho que não seria uma solução definitiva, e também não sei se irá funcionar numa BETMATECH.

Código: Selecionar todos

/*

 Compilar 
     Clipper logotoya /n
     rtlink fi logotoya

Autor: toya
       toya@alphams.com.br
       htt://www.alphams.com.br/empresas/toya/index.htm     
     
*/     
func logotoya()


local tipoprn := 2
* 1. Epson - matricial
* 2. Mini Impressora (48 colunas)

local m_val  := {128,64,32,16,8,4,2}
local nbytes := 91
local m_soma := array(nbytes)
local m_toya := {}
aadd(m_toya,'±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±')
aadd(m_toya,'±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±') 
aadd(m_toya,'±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±****±±±±±±±±±±±****±**±±±±*****±±±±±±±±±±±±****±±±±±±±±±') 
aadd(m_toya,'±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±*****±±±±±±±±±******±±***±±±*****±±±±±±±±±±******±±±±±±±±') 
aadd(m_toya,'±±±±±±±±±±±±±*±±±±±*±±±±±±±±±±±±±******±±±±±±±±*******±±±***±±±*****±±±±±±±±********±±±±±±±') 
aadd(m_toya,'±±±±±±*****±±±*±±±*±±±*****±±±±±±*********±±±±**±±±±±±±±±±***±±±*****±±±±±±******±±±±±±±±±±') 
aadd(m_toya,'±±±±±**±±±±**±±***±±**±±±±**±±±±±*********±±±***±±±±±±±±±±±***±±±*****±±±±******±±**±±±±±±±') 
aadd(m_toya,'±±±±±*±±**±±±**±*±**±±±**±±*±±±±±*********±±±***±±±±±±±±±±****±±±±*****±±******±±***±±±±±±±') 
aadd(m_toya,'±±±±±**±±**±±±±*±*±±±±**±±**±±±±±******±±±±±**********±±±******±±±±***********±±*****±±±±±±') 
aadd(m_toya,'±±±±±±**±±±±±±±±*±±±±±±±±**±±±±±±******±±±±±**********±±*******±±±±±*********±±******±±±±±±') 
aadd(m_toya,'±±±±±±±±*****±±*±*±±*****±±±±±±±±******±±±±±**********±********±±±±±±*******±±*******±±±±±±') 
aadd(m_toya,'±±±±±±±±±±±±***±*±***±±±±±±±±±±±±******±±±±±********±**********±±±±±*******±±********±±±±±±') 
aadd(m_toya,'±±±±±±±±±***±±±*±*±±±***±±±±±±±±±******±±±±±*******±±**********±±±±*******±±*********±±±±±±') 
aadd(m_toya,'±±±±±±±**±±±±±*±*±*±±±±±**±±±±±±±******±±±±±******±±±**********±±±*******±±**********±±±±±±') 
aadd(m_toya,'±±±±±±**±**±±**±*±**±±**±**±±±±±±******±±±±±±****±±±±±±±±±±***±±±*******±±***********±±±±±±') 
aadd(m_toya,'±±±±±±±**±±±**±±*±±**±±±**±±±±±±±******±±±±±±***±±±±±±±±±±±***±±*******±±*****±******±±±±±±') 
aadd(m_toya,'±±±±±±±±**±**±±±±±±±**±**±±±±±±±±******±±±±±±±***±±±±±±±±±±**±±*******±±******±±*****±±±±±±') 
aadd(m_toya,'±±±±±±±±±±**±±±±±±±±±**±±±±±±±±±±************±±***±±±*******±±*******±±**************±±±±±±') 
aadd(m_toya,'±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±************±±***±±******±±*******±±******±±±*****±±±±±±±') 
aadd(m_toya,'±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±************±±±**±****±±±*******±±******±±±±****±±±±±±±±') 
aadd(m_toya,'±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±') 

set cons off
set prin on

if tipoprn = 1
   ? chr(27)+'A'+chr(8)
else
   ? chr(27)+'@'
   ?? chr(27)+'A'+chr(8)
endi      

*
*
*   ?? chr(27)+'Y'+chr(64)+chr(0)
*               |     |      |
*               |     |      +--- n2
*               |     +---------- n1
*               +---------------- p
*
*   p -> altera a densidade
*   p=K densidade simples
*   p=L densidade dupla
*   p=Y alta velocidade com densidade dupla
*   p=Z densidade qu drupla
*
*   n1 e n2 definem a quantidade de colunas gr ficas a serem transmitidas
*
*   No nosso exemplo ter¡amos:
*
*        64 colunas / 256 = 0.25
*            portanto,
*            n2 ser  igual a 0 que ‚ a parte inteira da divisÆo
*        n2 = 0
*
*        64 colunas - (256 * n2) = 64
*            portanto,
*            n1 ser  igual a 64
*
*
*

densidade := 'K'
caracter  := '±'


afill(m_soma,0)
for i=1 to 7
   a := m_toya[i]
   for j=1 to nbytes
      if subs(a,j,1)= caracter
         m_soma[j] := m_soma[j] + m_val[i]
      endi
   next
next
   ?? chr(27)+densidade+chr(nbytes)+chr(0)
   for i=1 to nbytes; ?? chr(m_soma[i]+1);next
   ?? '       toya  Comercial Informatica'
   ?

afill(m_soma,0)
for i=1 to 7
   a := m_toya[i+7]
   for j=1 to nbytes
      if subs(a,j,1)= caracter
         m_soma[j] := m_soma[j] + m_val[i]
      endi
   next
next
   ?? chr(27)+densidade+chr(nbytes)+chr(0)
   for i=1 to nbytes; ?? chr(m_soma[i]+1);next
   ?

afill(m_soma,0)
for i=1 to 7
   a := m_toya[i+14]
   for j=1 to nbytes
      if subs(a,j,1)= caracter
         m_soma[j] := m_soma[j] + m_val[i]
      endi
   next
next
   ?? chr(27)+densidade+chr(nbytes)+chr(0)
   for i=1 to nbytes; ?? chr(m_soma[i]+1);next
   ?? '(c)-1998~1999 Fone: (067) 441.2861'
   ?   
?
?
? chr(27)+'@'
?
?
?
?
set cons on
set prin off
return nil
Fico no aguardo para mais alguma idéia.

Um clip-abraço
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Uma idéia que eu usaria: imprimir o hash MD5 na própria autenticação. Se alguém quiser falsificar, terá de saber quais dados foram utilizados no cálculo. Eu arrisco dizer que será impossível de falsificar. Principalmente, se você "somar" à string dos dados uma string secreta que SÓ você conhece.
Logicamente, você teria de ter uma opção no programa que mostre o hash que a autenticação deverá ter. Mas com senha para acesso privilegiado, claro.

[]'s
Maligno
http://www.buzinello.com/prg
Avatar do usuário
Pablo César
Usuário Nível 7
Usuário Nível 7
Mensagens: 5312
Registrado em: 31 Mai 2006 10:22
Localização: Curitiba - Paraná

Mensagem por Pablo César »

É mesmo !. Não lembrava do MD5 que você inclusive disponibilizou pra nós. Certo mesmo que é uma solução bem prática e pode ser conjugada como quiser. Mas mesmo fizer com os dados simples e uma string secreta, acho que seria muito difícil mesmo de burlar.

Valeu ! MALIGNO !.

Um clip-abraço ! :)Pos
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem por Maligno »

Pablo César escreveu:É mesmo !. Não lembrava do MD5 que você inclusive disponibilizou pra nós.
Inclusive vou repetir o link, para o caso de mais alguém se interessar:
http://buzinello.com/download/md5.zip

[]'s
Maligno
http://www.buzinello.com/prg
Responder