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


 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