Gerar o codigo MD5 a partir de uma STRing
Moderador: Moderadores
-
LDOSISTEMAS
- Usuário Nível 1

- Mensagens: 48
- Registrado em: 01 Set 2014 17:04
- Localização: CLAUDIO/MG
- Contato:
Gerar o codigo MD5 a partir de uma STRing
Bom dia, estou criando uma aplicação para emissão da NF 21 de telecomunicações, um dos requisitos é a geração do MD% a partir de uma string composta pelo CNPJ,numero da NF,valor total ,base calculo do ICMS e valor do ICMS, busquei aqui no site e encontrei citações do HB_MD5 para fazer isso, mas ao utilizar no codigo o programa gerar normalemnte não acusando que a função HB_MD5 não existe, mas ao entrar no rotina onde ele é chamado retorna erro base 1001 , com o nome da HB_MD5, nos posts que encontrei a função eram apenas partes, não vi se necessita algum request ou include para a mesma funcionar.
Gostaria da ajuda de vocês com exemplos ou algum material com detalhes de como usar.
Estou usando o harbour 3.2 compilando em modo texto.
Desde já agradeço
Gostaria da ajuda de vocês com exemplos ou algum material com detalhes de como usar.
Estou usando o harbour 3.2 compilando em modo texto.
Desde já agradeço
Gerar o codigo MD5 a partir de uma STRing
Não precisa de nenhuma configuração extra, o HB_MD5() faz parte do núcleo do Harbor 3.2.
Veja se esta passando uma string para a função. Quando falta a função devido algum include nem chega a compilar.
Na dúvida posta seu código.
Veja se esta passando uma string para a função. Quando falta a função devido algum include nem chega a compilar.
Na dúvida posta seu código.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
-
LDOSISTEMAS
- Usuário Nível 1

- Mensagens: 48
- Registrado em: 01 Set 2014 17:04
- Localização: CLAUDIO/MG
- Contato:
Gerar o codigo MD5 a partir de uma STRing
aqui esta o trecho onde estou chamando a função
Os campos CNPJ e numnota são string por isso não tratei
Código: Selecionar todos
AADD(sistema[015,O_FORMULA],{; // NF21 - Base Icms
/* form mostrar */ "LEFT(TRAN(baseicms,[@E 999,999,999.99]),14)",;
/* lin da formula*/ 7,;
/* col da formula*/ 18;
};
)
AADD(sistema[015,O_FORMULA],{; // NF21 - Total Icms
/* form mostrar */ "LEFT(TRAN(totalicms,[@E 999,999,999.99]),14)",;
/* lin da formula*/ 8,;
/* col da formula*/ 18;
};
)
AADD(sistema[015,O_FORMULA],{; // NF21 - MD5
/* form mostrar */ "LEFT(TRAN(HB_MD5(M->CNPJ_emp+numnota+STR(valortotal,12,2)+STR(baseicms,12,2)+STR(totalicms,12,2)),[]),32)",;
/* lin da formula*/ 7,;
/* col da formula*/ 33;
};
Gerar o codigo MD5 a partir de uma STRing
Fiz um teste aqui simulando o conteúdo da linha
O erro acusa ai nessa chamada ou em outro local onde se executa a linha propriamente dita contida no array. De mais detalhes do erro.
e não acusou erro."LEFT(TRAN(HB_MD5(M->CNPJ_emp+numnota+STR(valortotal,12,2)+STR(baseicms,12,2)+STR(totalicms,12,2)),[]),32)"
O erro acusa ai nessa chamada ou em outro local onde se executa a linha propriamente dita contida no array. De mais detalhes do erro.
Clipper 5.2e / Blinker 5.1 / Harbour 3.2 / GTwvg
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerar o codigo MD5 a partir de uma STRing
Nem todo mundo costuma ficar atualizando o Harbour.Estou usando o harbour 3.2 compilando em modo texto.
Convém lembrar que faz muitos anos que o Harbour não altera o número de versão, desde antes de existir o hb_Md5.
Melhor confirmar o mês/ano
Em todo caso, pra confirmar se existe, use o HBMK2.Harbour 3.4.0dev (0e93b09f53) (2017-05-31 23:04)
Copyright ( c ) 1999-2017, https://github.com/vszakats/harbour-core/
hBMK2 -find md5
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerar o codigo MD5 a partir de uma STRing
Mas pera aí....
Isso é uma string, provavelmente deve estar usando macro depois.
Pra macro funcionar, vai depender de existirem as variáveis/campos no momento da execução.
E se forem campos de arquivo, vai depender de estar posicionado no DBF correto.
M->CNPJ_emp
NumNota
ValorTotal
BaseIcms
TotalIcms
É por isso que seria preferível usar Codeblock e não string/macro, porque tem validação de tudo, e mensagem de erro mais detalhada.
Não faça o mesmo que a minigui fez, de esquecer do codeblock.
Em último caso, teste assim:
Pelo menos vai poder ver melhor que erro está acontecendo.
Código: Selecionar todos
"LEFT(TRAN(HB_MD5(M->CNPJ_emp+numnota+STR(valortotal,12,2)+STR(baseicms,12,2)+STR(totalicms,12,2)),[]),32)"
Pra macro funcionar, vai depender de existirem as variáveis/campos no momento da execução.
E se forem campos de arquivo, vai depender de estar posicionado no DBF correto.
M->CNPJ_emp
NumNota
ValorTotal
BaseIcms
TotalIcms
É por isso que seria preferível usar Codeblock e não string/macro, porque tem validação de tudo, e mensagem de erro mais detalhada.
Não faça o mesmo que a minigui fez, de esquecer do codeblock.
Em último caso, teste assim:
Código: Selecionar todos
"CalculaMd5()"
...
FUNCTION CalculaMD5()
RETURN LEFT(TRAN(HB_MD5(M->CNPJ_emp+numnota+STR(valortotal,12,2)+STR(baseicms,12,2)+STR(totalicms,12,2)),[]),32)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
LDOSISTEMAS
- Usuário Nível 1

- Mensagens: 48
- Registrado em: 01 Set 2014 17:04
- Localização: CLAUDIO/MG
- Contato:
Gerar o codigo MD5 a partir de uma STRing
eu chequei com - find e existe o hb_md5, vou fazer como você indicou.
-
LDOSISTEMAS
- Usuário Nível 1

- Mensagens: 48
- Registrado em: 01 Set 2014 17:04
- Localização: CLAUDIO/MG
- Contato:
Gerar o codigo MD5 a partir de uma STRing
José M. C. Quintas, realmente fazendo como indicou passou, já havia usado , não com essa função mas com outras, dessa maneira e sempre funcionou, mas enfim, criando o calcmd5() como indicou ele retornou. Eu utilizo o gaspro40 para gerar o codigo e depois faço as alterações para compilar no harbour , imagino que deva ser alguma forma que o codigo fica gerado, mas agradeço muito a ajuda, vou atentar sempre a seguir dessa forma.
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerar o codigo MD5 a partir de uma STRing
"Talvez" tenha que indicar o ALIAS nos campos, pra macro saber que se trata de campo de dbf.
Em último caso, se realmente for de DBF e não puder definir alias: field->BaseIcms, field->TotalIcms, field->ValorTotal
O ideal mesmo seria poder usar codeblock.
Mais uma coisa: não sei se TRANS( é interpretado pela macro por Transform(, talvez seja o pré-compilador que traduza isso na compilação.
Em último caso, se realmente for de DBF e não puder definir alias: field->BaseIcms, field->TotalIcms, field->ValorTotal
O ideal mesmo seria poder usar codeblock.
Mais uma coisa: não sei se TRANS( é interpretado pela macro por Transform(, talvez seja o pré-compilador que traduza isso na compilação.
Código: Selecionar todos
bCode := { || ;
Left( Transform( ;
HB_MD5( ;
M->CNPJ_emp + field->numnota + STR( field->valortotal, 12, 2 ) + ;
STR( field->baseicms, 12, 2 ) + STR( field->totalicms, 12, 2 ) ;
), "" ), 32 ) }
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
Gerar o codigo MD5 a partir de uma STRing
Confirmado. Tem a ver com hb_MD5 que só é linqueditado se for usado explicitamente.
Só funcionou depois de acrescentar EXTERNAL hb_Md5 (e definir variáveis como PRIVATE)
Sem a declaração EXTERNAL
Nota: do jeito que mostrei, em função separada, acabou linqueditando a hb_md5(), por isso funcionou.
Só funcionou depois de acrescentar EXTERNAL hb_Md5 (e definir variáveis como PRIVATE)
Código: Selecionar todos
MEMVAR Cnpj_Emp, NumNota, ValorTotal, BaseIcms, TotalIcms, x
EXTERNAL hb_Md5 // <<=============
PROCEDURE Main
PRIVATE x
PRIVATE Cnpj_Emp := ""
PRIVATE NumNota := ""
PRIVATE ValorTotal := 0
PRIVATE BaseIcms := 0
PRIVATE TotalIcms := 0
x := &( "cnpj_Emp" )
x += &( "Str( ValorTotal, 12, 2 )" )
x += &( "Str( BaseIcms, 12, 2 )" )
x += &( "Str( TotalIcms, 12, 2 )" )
x := &( "hb_Md5( x )" )
x := &( "Transform( x, [] )" )
x := &( "Left( x, 32 )" )
? x
RETURN
Mais um motivo pra sempre que possível usar codeblock..... rsd:\temp>test
Error BASE/1001 Undefined function: HB_MD5
Called from HB_MD5(0)
Called from MAIN(17)
Nota: do jeito que mostrei, em função separada, acabou linqueditando a hb_md5(), por isso funcionou.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
https://github.com/JoseQuintas/
-
LDOSISTEMAS
- Usuário Nível 1

- Mensagens: 48
- Registrado em: 01 Set 2014 17:04
- Localização: CLAUDIO/MG
- Contato:
Gerar o codigo MD5 a partir de uma STRing
Obrigado mais um conhecimento adquirido, realmente as outras funções que já usei sempre estavam implícitas em outras partes do fonte, por isso funcionavam.
Valeu mesmo, declarando com external ou através do codeblock funcionou perfeito.
Valeu mesmo, declarando com external ou através do codeblock funcionou perfeito.

