CRC16 CCITT FFFF PIX NO VB6

 Tópico anterior Próximo tópico Novo tópico

CRC16 CCITT FFFF PIX NO VB6

VB / VBA

 Compartilhe  Compartilhe  Compartilhe
#496305 - 22/02/2021 10:02:45

NAIDAROM
APIAI
Cadast. em:Junho/2013


Bom dia, pessoal do fórum.. Estou precisando de uma ajuda pra gerar o checksum do QR CODE do PIX no vb6. Alguém já conseguiu decifrar essa parte? Fiz muitas pesquisas, encontrei códigos, mas nenhum retornou o valor correto..
Tenho esse exemplo:
string = 123456789
crc16 = 29B1
mas de maneira alguma consigo achar um código que retorne isso.. E meu conhecimento nessa parte é praticamente nulo pra criar uma função sozinho.. Se algum colega tiver decifrado isso e tiver a bondade de disponibilizar o código, fico extremamente agradecido..



#496307 - 22/02/2021 14:15:27

NAIDAROM
APIAI
Cadast. em:Junho/2013


Após mais uma rodada de pesquisas, encontrei uma função em C# que retorna o valor correto. Converti ela pra vb.Net em uma DLL e estou utilizando e aparentemente, tudo ok.. Segue o código..
P.S. Não tenho experiencia em vb.Net, então, utilizei ferramentas de conversão e fiz alguns ajustes por conta de erros, portanto, ignorem (e corrijam, por favor) qualquer coisa fora dos padrões.. Quando funcionou, parei de mexer..
  Imports System.Runtime.InteropServices
Imports CRC16Lib
'InteliSense
<ComVisible(True)>
<Guid('F0795888-4923-42CB-970E-79CA42B98099')>
<InterfaceType(ComInterfaceType.InterfaceIsIDispatch)>
Public Interface iCRC16_CCITT
  Function CRC16_CCITT(sInput As String) As String
End Interface

<ComVisible(True)>
<Guid('A4F286E6-19E7-4957-A73A-0FB77C3DBC98')>
<ClassInterface(ClassInterfaceType.None)>
<ProgId('CRCFunctions')>
Public Class CRCFunctions
  Implements iCRC16_CCITT
  Private crc_tabccitt As UShort() = New UShort(255) {}
  Private bIniTabelaCCITT As Boolean = False
  Private Const POLY = &H1021

  Private Sub sInicializarTabela()
    Dim i%, j%
    Dim crc As UShort, c As UShort

    For i = 0 To 255
      crc = 0
      c = CUShort(i << 8)

      For j = 0 To 7
        If ((crc Xor c) And &H8000) <> 0 Then
          crc = CUShort(crc << 1 Xor POLY)
        Else
          crc = crc << 1
        End If
        c = c << 1
      Next
      crc_tabccitt(i) = crc
    Next

    bIniTabelaCCITT = True
  End Sub

  Private Function update_crc_ccitt(ByVal crc As UShort, ByVal c As Integer) As UShort
    Dim tmp As UShort

    If Not bIniTabelaCCITT Then sInicializarTabela()
    tmp = crc >> 8 Xor c
    crc = CUShort(crc << 8 Xor crc_tabccitt(tmp))
    Return crc
  End Function
  'RETORNO DA CHAMADA JA FORMATADO - OK
  Public Function CRC16_CCITT(ByVal sInput As String) As String Implements iCRC16_CCITT.CRC16_CCITT
    Dim lCRC As UShort = &HFFFF
    Dim i&

    For i = 0 To sInput.Length - 1
      lCRC = update_crc_ccitt(lCRC, AscW(sInput(i)))
    Next

    Return lCRC.ToString('X4')
  End Function
EndClass




#496393 - 03/03/2021 14:17:10

WJC037
INDAIATUBA
Cadast. em:Dezembro/2010


Segue função:

    Public Function CRC16(ByVal s As String) As String
        Dim crc = &HFFFF
        Dim polynomial = &H1021
        Dim bytes As Byte() = System.Text.Encoding.ASCII.GetBytes(s)
        For Each b As Byte In bytes
            For i = 0 To 8 - 1
                Dim bit As Boolean = ((b >> (7 - i) And 1) = 1)
                Dim c15 As Boolean = ((crc >> 15 And 1) = 1)
                crc <<= 1
                If c15 Xor bit Then crc = crc Xor polynomial
            Next
        Next
        crc = crc And &HFFFF
        Return crc.ToString('X').PadLeft(4, Microsoft.VisualBasic.ChrW(48))
    End Function



#498024 - 03/09/2021 18:36:49

MFLAVIO
CAMPINAS
Cadast. em:Maio/2009


Citação:
:
Segue função:

    Public Function CRC16(ByVal s As String) As String
        Dim crc = &HFFFF
        Dim polynomial = &H1021
        Dim bytes As Byte() = System.Text.Encoding.ASCII.GetBytes(s)
        For Each b As Byte In bytes
            For i = 0 To 8 - 1
                Dim bit As Boolean = ((b >> (7 - i) And 1) = 1)
                Dim c15 As Boolean = ((crc >> 15 And 1) = 1)
                crc <<= 1
                If c15 Xor bit Then crc = crc Xor polynomial
            Next
        Next
        crc = crc And &HFFFF
        Return crc.ToString('X').PadLeft(4, Microsoft.VisualBasic.ChrW(48))
    End Function


o que seria o X da linha Return crc.ToString('X').PadLeft(4, Microsoft.VisualBasic.ChrW(48))

Deus e o maior dos Programadores, ele criou tudo em liguagem visual
                                           .... e viu Deus que era bom


#499051 - 13/01/2022 10:47:55

ANDPAG
SAO JOSE DO RIO PRETO
Cadast. em:Julho/2009


Olá, bom dia. Eu vi seu topico referente ao checksum do pix e que voce resolveu parte criando uma dll no Vb.net para consumi-la no seu projeto vb6, é isso mesmo? Como você utiliza a dll feita em .net no vb6? Eu estou apanhando demais com isso. Eu tive que criar uma dll no Vb.net para usa-la em um projeto vb6 mas não da certo. Quando eu gero a dll no Visual Studio, ela gera tudo ok, entro no Vb6 e ela ja aparece nas referências. Eu  referencio ela no projeto e roda tudo certinho, mas quando eu passo o executável feito em vb6 com a dll para o computador do cliente, da erro (Classe não registrada) e não
roda de jeito nenhum. Eu também não consigo registra-la usando regsvr32, não consigo registrar nem a dll nem o tlb. Se você me der uma ajuda com isso ficarei muito grato, abs.



#499052 - 13/01/2022 11:22:55

FUTURA
.
Cadast. em:Maio/2004


Usei uma época uma dll .net no vb6, mas o registro não era pelo regsvre32, era pelo regasm da uma pesquisada que tem uma sintaxe específica para executar da pasta do framework



#499055 - 13/01/2022 16:56:41

NAIDAROM
APIAI
Cadast. em:Junho/2013


Última edição em 13/01/2022 16:58:31 por NAIDAROM

Como dito pelo Futura.. eu uso o regasm p registrar ela da seguinte forma e funciona certinho:

@%windir%\Microsoft.NET\Framework\v4.0.30319\regasm '%~dp0\CRC16Lib.dll' /tlb:'%~dp0\CRC16Lib.tlb'




#499088 - 18/01/2022 10:36:40

ANDPAG
SAO JOSE DO RIO PRETO
Cadast. em:Julho/2009


Citação:
:
Como dito pelo Futura.. eu uso o regasm p registrar ela da seguinte forma e funciona certinho:

@%windir%Microsoft.NETFramework 4.0.30319
egasm '%~dp0CRC16Lib.dll' /tlb:'%~dp0CRC16Lib.tlb'


Obrigado pelo retorno pessoal. Eu registrei pelo regasm para ele gerar o .tlb, ate ai foi tudo certo, só que a dll quando eu rodo no projeto do sistema em vb6 ela não vai de jeito nenhum, gera  o erro (Automation erro). Para teste eu criei um projeto zerado no vb6, apenas com um botão e usei a mesma dll que funcionou sem dar erro. No sistema ela da automation erro e neste projeto em branco sem nada ela roda normal. Já estou até cozido de tanto brigar com essa dll. rsrs.



#499097 - 19/01/2022 01:52:45

NAIDAROM
APIAI
Cadast. em:Junho/2013


Citação:
Obrigado pelo retorno pessoal. Eu registrei pelo regasm para ele gerar o .tlb, ate ai foi tudo certo, só que a dll quando eu rodo no projeto do sistema em vb6 ela não vai de jeito nenhum, gera  o erro (Automation erro). Para teste eu criei um projeto zerado no vb6, apenas com um botão e usei a mesma dll que funcionou sem dar erro. No sistema ela da automation erro e neste projeto em branco sem nada ela roda normal. Já estou até cozido de tanto brigar com essa dll. rsrs.


O projeto compilado roda normal sem erro? Eu recebia automation error com uma dll e a solução foi colocar uma cópia dela na pasta do vb6 (C:\Program Files (x86)\Microsoft Visual Studio\VB98)..
Se eu abrisse o projeto pelo .vbp dele direto na pasta onde estava os fontes, não dava erro. Agora se abrisse por algum atalho ou pelo histórico do vb6, retornava o erro.. Nunca entendi realmente o motivo disso, mas fazer o processo de copiar a dll e o tlb pra pasta do vb6 resolveu. É algo a se tentar.



#499114 - 21/01/2022 04:32:43

ANDPAG
SAO JOSE DO RIO PRETO
Cadast. em:Julho/2009


Citação:
:
Obrigado pelo retorno pessoal. Eu registrei pelo regasm para ele gerar o .tlb, ate ai foi tudo certo, só que a dll quando eu rodo no projeto do sistema em vb6 ela não vai de jeito nenhum, gera  o erro (Automation erro). Para teste eu criei um projeto zerado no vb6, apenas com um botão e usei a mesma dll que funcionou sem dar erro. No sistema ela da automation erro e neste projeto em branco sem nada ela roda normal. Já estou até cozido de tanto brigar com essa dll. rsrs.

O projeto compilado roda normal sem erro? Eu recebia automation error com uma dll e a solução foi colocar uma cópia dela na pasta do vb6 (C:Program Files (x86)Microsoft Visual StudioVB98)..
Se eu abrisse o projeto pelo .vbp dele direto na pasta onde estava os fontes, não dava erro. Agora se abrisse por algum atalho ou pelo histórico do vb6, retornava o erro.. Nunca entendi realmente o motivo disso, mas fazer o processo de copiar a dll e o tlb pra pasta do vb6 resolveu. É algo a se tentar.

Na verdade no projeto funciona normal. O problema é quando eu jogo no computador do cliente, lá não tem VB6 e sim somente o sistema rodando. No sistema a dll da automation erro. Para teste eu compilei um executável sem nada, apenas com um botão em um form chamando a mesma dll. Eu joguei este executável no computador do cliente onde também está o sistema e para minha surpresa neste executável simples a dll roda já no sistema não vai de jeito nenhum.



#499118 - 21/01/2022 14:53:35

ANDPAG
SAO JOSE DO RIO PRETO
Cadast. em:Julho/2009


Resolvido o problema Automation Erro da Dll em vb.net rodando em sistema feito em vb6! Joguei a dll na pasta raíz do sistema no computador do cliente e ela rodou! Valeu!



 Tópico anterior Próximo tópico Novo tópico


Para responder este tópico o login é requerido
Se você já possui uma conta de usuário por favor faça seu login
Se você não possui uma conta de usuário use a opção Criar usuário