Gerando o MD5 a ser impresso no cupom fiscal
Breve explicação do requisito IX do roteiro de homologação, a partir da versão 1.05.
Tenho sido questionado nos últimos dias sobre a nova regra do requisito IX do roteiro, aplicado a partir da versão 1.05.
Vamos analisar o texto.
ITEM 1: O PAF-ECF deve, a cada inicialização:
Logo na descrição já indica que deverá ser executado esta rotina toda vez que o aplicativo for inicializado, ou seja, no Delphi deverá se adicionado no evento “OnShow” do formulário principal;
a) gerar, por meio do algoritmo Message Digest-5 (MD-5), código de autenticação para cada arquivo
executável que realize os requisitos estabelecidos nesta especificação;
b) gerar um arquivo texto contendo a lista de arquivos autenticados, e seus respectivos códigos MD-5;
Nos itens “a” e “b” dizem para gerar um código MD5 para cada executável que fizer parte do PAF-ECF e armazenar em um arquivo do tipo “.TXT”. O arquivo deverá ficar mais ou menos assim:
C:\PAF_ECF\Configura.exe - a79fdb1100bc785fd2abe545686c2712
C:\PAF_ECF\Retaguarda.exe - 2eb6f562cf2ef6b6b66ed714c9413d47C
C:\PAF_ECF\PAF_ECF.exe - f32e0be6eba2c53983f9d767c5b0011d
C:\PAF_ECF\Sintegra.exe - f2151c0cf348cfa062b9569d9695488b
c) gerar, por meio do algoritmo Message Digest-5 (MD-5), código de autenticação do arquivo TXT a
que se refere a alínea “b” e gravar o resultado no arquivo auxiliar criptografado e inacessível ao
estabelecimento usuário de que trata o item 4 do Requisito XXII, sobrepondo à gravação anteriormente
realizada, devendo este código ser impresso no Cupom Fiscal, no campo:
Já no item “c”, diz que deverá ser gerado o MD5 do arquivo texto criado anteriormente com a lista de executáveis, e armazenar de forma criptografada, junto com o Serial e GT da impressora no arquivo auxiliar de verificação, referido no requisito XXII.
c1) "informações complementares", no caso de ECF que disponibilize este campo, devendo utilizar este
campo para esta informação e iniciando a impressão na primeira coluna da primeira linha;
c2) "mensagens promocionais", no caso de ECF que não disponibilize o campo "informações
complementares", devendo utilizar a primeira linha para esta informação e iniciando a impressão na
primeira coluna da primeira linha.
No complemento do item “c”, diz para imprimir este MD5 do arquivo “.TXT”, que foi armazenado no arquivo auxiliar, na primeira coluna da primeira linha do campo de mensagem promocional, usada para realizar o fechamento do cupom fiscal, ou seja, em todos os cupons fiscal impressos, deverá ter este MD5 no fechamento, como primeira informação.
Este requisito é uma forma de garantir que não haverá alterações no aplicativo homologado, pois uma vez que tenha alguma alteração no executável, o código MD5 não será mais o mesmo. E mesmo que não haja alteração na fonte do executável, o simples fato de re-compilar o mesmo, acarretará em mudança no MD5.
Segue abaixo o script da função que uso para realizar esta operação;
var Arquivo : TextFile;
NomeArq, ArqTexto, aMD5 : String;
F: TSearchRec;
Ret: Integer;
begin
Result := '';
try
// Apaga arquivo anterior
ArqTexto := ExtractFilePath(Application.ExeName)+'ArqMD5.txt';
if FileExists(ArqTexto) then
DeleteFile(ArqTexto);
// cria o arquivo TXT na mesma pasta do sistema
AssignFile(Arquivo,ArqTexto);
ReWrite(Arquivo);
// lista todos os arquivo exe da pasta do aplicativo e gera o MF5
Ret := FindFirst(ExtractFilePath(Application.ExeName)+'\*.exe', faAnyFile, F);
try
while Ret = 0 do
begin
if F.Attr and faDirectory <> faDirectory then
begin
NomeArq := ExtractFilePath(Application.ExeName)+'\'+F.Name;
aMD5 := MD5Print(MD5File(NomeArq));
WriteLn(Arquivo,NomeArq+' - '+aMD5);
end;
Ret := FindNext(F);
end;
finally
FindClose(F);
end;
Closefile(Arquivo);
// gera MD5 do arquivo texto
finally
Result := MD5Print(MD5File(ArqTexto));
end;
end;


No artigo ficou faltando a funcao MD5Print(MD5File(ArqTexto));
Voce poderia passa-la?
Obrigado, assistencia@cmbalancas.com.br
em 23/10/2010 11:19 - Responder

Luis Carlos Godinhoem 23/10/2010 22:45 - Responder


em 22/10/2010 15:15 - Responder

Luis Carlos GodinhoNão é pra acontecer isso, pois a rotina deve ficar no onshow do formulário e com certeza neste momento o executável esta em uso. Você baixou o aplicativo exemplo que esta disponível no topo da página. Caso não tenha baixado, dê uma olhada lá, pois no exemplo esta fazendo certinho.
Abs!
em 22/10/2010 16:04 - Responder


em 4/11/2010 12:55 - Responder

Luis Carlos Godinhopara
para
para
em 4/11/2010 14:25 - Responder

W7 Solucoes Ltdavar
Arquivo : TextFile;
NomeArq, ArqTexto, aMD5: string;
F : TSearchRec;
Ret : Integer;
begin
Result := '';
try
// Apaga arquivo anterior
ArqTexto := ExtractFilePath(Application.ExeName)+'ArqMD5.txt';
if FileExists(ArqTexto) then
DeleteFile(ArqTexto);
// cria o arquivo TXT na mesma pasta do sistema
AssignFile(Arquivo, ArqTexto);
ReWrite(Arquivo);
// lista todos os arquivo exe da pasta do aplicativo e gera o MF5
Ret := FindFirst(ExtractFilePath(Application.ExeName)+'\*.exe', faAnyFile, F);
try
while Ret=0 do
begin
if F.Attr and faDirectory<>faDirectory then
begin
NomeArq := ExtractFilePath(Application.ExeName)+'\'+F.Name;
aMD5 := MD5Print(MD5File(NomeArq));
WriteLn(Arquivo, NomeArq+' - '+aMD5);
end;
Ret := FindNext(F);
end;
finally
FindClose(F);
end;
Closefile(Arquivo);
// gera MD5 do arquivo texto
finally
Result := MD5Print(MD5File(ArqTexto));
end;
em 2/12/2010 11:44 - Responder

Luis Carlos GodinhoOlá!
em 2/12/2010 15:48 - Responder

W7 Solucoes Ltdaem 2/12/2010 16:51 - Responder

em 14/1/2011 17:10 - Responder

Luis Carlos Godinhoem 14/1/2011 17:30 - Responder


ainda não terminei de ler todo o roteiro do paf, mas fiquei com uma duvida nessa sua aula: o aplicativo paf (ou seja, o executavel do paf) vai gerar um arquivo txt com todos os executaveis que estão no diretorio (que sub-entende que sejam os executaveis homologados), mas por que o retaguarda está ali? vou ter que homologar meu retaguarda tambem? meu retaguarda muda semanalmente, esse MD5 sempre vai mudar, como fica?
abraço!
Fernando.
em 9/4/2011 15:51 - Responder

Luis Carlos GodinhoTodos os executáveis e DLL que compôem o projeto do PAF. Se o seu retaguarda fizer parte do PAF, acredito que deverá homologar. Ma entendo que o retaguarda não precisa fazer parte do PAF.
Este projeto é apenas um exemplo.
Abs!
em 9/4/2011 22:40 - Responder


em 6/5/2011 10:14 - Responder

Luis Carlos GodinhoEntram sim, basta fazer a rotina adicionando a extenção .DLL.
Abs!
em 6/5/2011 13:30 - Responder


Grato,
André
plansoft@gmail.com
em 24/6/2011 16:34 - Responder

Luis Carlos GodinhoNo proprio componente Acbr pode ser encontrada a unit.
De qualquer forma, segue o link:
http://www.koders.com/delphi/fid5A4F925F646C191A79107D11EDD80DDDF205615E.aspx
Abs!
em 24/6/2011 20:30 - Responder
Curso(s):
Space do autor

download
Estudo comparativo entre banco de dados IBM Informix e Microsoft SQL
2
0
Conheça os planos de créditos DevMedia e visualize esse post agora mesmo!