bacen / pix-api

API Pix: a API do Arranjo de Pagamentos Instantâneos Brasileiro, Pix, criado pelo Banco Central do Brasil.
https://bacen.github.io/pix-api
2.37k stars 268 forks source link

[Dúvida] Calculo CRC16 #79

Closed itrigo closed 4 years ago

itrigo commented 4 years ago

Estou com duvidas no calculo do CRC16, em alguns exemplos nos manuais disponibilizados não batem. É possível disponibilizar o algoritmo, assim como foi feito com o calculo do cid?

ninrod commented 4 years ago

@itrigo ,

Seção 1.5.4 do Manual de iniciação "Exemplo de QR Estático". Você tem que incluir na conta o ID 63 juntamente com seu tamanho, 04.

Você aplica o CRC16 sobre a string inteira, não esquecendo do ID 63 e de seu tamanho 04 e utiliza-se o polinômio 0x1021 inicilizado com 0xFFFF.

No exemplo demonstrado no manual:

$ FUNC_CRC16("00020126580014br.gov.bcb.pix0136123e4567-e12b-12d1-a456-426655440000
5204000053039865802BR5913Fulano de Tal6008BRASILIA62070503***6304", 0x1021,  0xFFFF); 

-> 1D3D
$
itrigo commented 4 years ago

@ninrod

O método que desenvolvemos para o calculo (em java), funciona para um exemplo e para outro não.

Exemplo do Manual de Padrões para Iniciação do Pix, pg 09:

crc16("00020126580014br.gov.bcb.pix0136123e4567-e12b-12d1-a456-4266554400005204000053039865802BR5913Fulano de Tal6008BRASILIA62070503***6304", 0x1021, 0xFFFF); -->1D3D (bate com o manual)

Exemplo do Manual de Padrões para Iniciação do Pix, Pg 19: crc16("00020101021226720014br.gov.bcb.pix2550bx.com.br/pix/8b3da2f3-9a41-40d1-a91abd93113bd4415204000053039865406123.455802BR5913Fulano de Tal6008BRASILIA62190515RP12345678-20196304", 0x1021, 0xFFFF); --> EE3A (não bate com o exemplo, qual o resultado é 45C8)

Consegue verificar por gentileza se o calculo da página 19 está correto?

ninrod commented 4 years ago

ok @itrigo , vamos verificar.

ninrod commented 4 years ago

cc: @dmkamers

dmkamers commented 4 years ago

@itrigo o exemplo do Manual está correto (FF24).

Note que está faltando um traço (-) na sua string (na url, seu uuid está com 35 caracteres): "...a91abd..." (que resulta em EE3A), ao invés de "...a91a-bd..." (que resulta no CRC 45C8). Note ainda que seu exemplo é diferente (deve ser versão anterior do manual).

Na versão atual, o domínio do banco é example.com (muda o tamanho também), resultando no CRC correto FF24.

ninrod commented 4 years ago

Obrigado @dmkamers ,

@itrigo , resolvido o problema?

itrigo commented 4 years ago

Resolvido!!! Muito Obrigado. Abs