-
Notifications
You must be signed in to change notification settings - Fork 272
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Validação do CRC 16 e EMV #189
Comments
@felipecamargo , obrigado pelo reporte. |
@felipecamargo
Isso parece ser um BRCode contendo um 'rail' do tipo "Cielo" (os campos '01 EDIT: não se espera que os campos EDIT2: um
Neste (e em varios outros casos) aparece esse objeto |
Pessoal, boa tarde! Alguém poderia dar uma idéia de como calcular o CRC16? Agradeço! |
@jeansentose tem várias bibliotecas em linguagens diversas no github. Tem uma rotina neste link, em typescript (javascript++), fácil de converter para a tua linguagem de estimação. |
@jeansentose depois se quiser, pode copie e cola a string que gerou aqui neste site para validação. |
Valeu, meu amigo !! Agradeço o apoio !! |
@seanwykes Só uma dúvida... qual o campo que ele usa para validar? Digo, a posição que ele usa como base... |
Então, acabei de gerar um QR estático pelo site gerarpix.com.br, assim: Quebrando em tags (incluí espaços, indentação e quebras de linha para melhorar a leitura), tem: Observe a última tag 63, de tamanho 04. O CRC deve ser calculado do início da string do QR até, e incluindo, o 6304. Neste exemplo, calcula-se o CRC sobre 00020126330014BR.GOV.BCB.PIX01112178262481352040000530398654041.005802BR5902me6009somewhere62130509pagamento6304 No final, concatena o CRC, que tem 16 bits / 2 bytes, como 4 caracteres HEXA (com padding de "0" em cada byte). A página que passei tem um botão para recalcular o CRC (mas é preciso que a estrutura de tags seja válida) |
Valeu meu querido !! Agradeço muito a ajuda !! |
Você conseguiu gerar? se sim para qual linguagem? não estou conseguindo gerar em c# :/ |
@alexandresanlim pode usar este site para validar a sua geração. A tela também gera QR estático e dinâmico, e pode regerar o CRC correto para um QR. Em C# tem várias libs no github, como por exemplo https://github.com/juanroman-zz/emvqr |
Hoje pela manhã eu finalmente consegui tendo o seu código em TypeScript como base, o resultado esta aqui. |
@jeansentose Eu utilizo PHP para gerar o QRCODE. A funcao que utilizo é: Estou trabalhando em um conversor online. O exemplo está no link |
Pessoal estou enroscado aqui com o CRC16 minha string esta tudo OK mas o calculo do CRC16 não bate de jeito nenhum, uso Delphi, baixei algumas função de calculo de CRC16 mas nada esta dando certo, alguém ai que trabalhe com Delphi e já tenha passado por esse problema, pra me fazer um Freelance aqui. obrigado meu contato WhatsApp (42) 9 8403-0313 - Sergio. uso essas funções se sucesso: function Crc16(texto: string): WORD; |
Fala ai blz, em delphi estou gerando desta forma. function CRC16CCITT(texto: string): WORD; e chamo a função desta forma. inttohex(CRC16CCITT(minhachave),4); Testei em diversos bancos só o Itau que estou dependendo do gerente descobrir lá onde libera kkkk. |
|
Boa tarde Pessoal, estou tentando gerar meu calculo CRC16 através de uma função criada no SQL. Abaixo estão as informações que estão sendo calculadas: |
Não sei se entendi exatamente o que você está tentando fazer. Você está tentando validar o CRC de um QR Code diretamente no SQL? Esses valores que você mencionou não são um BR Code completo. As informações estão sem os IDs dos "templates" EMV e seus tamanhos. Por ex: o primeiro valor, |
O CRC deve ser calculado em cima de:
que é "tudo menos o próprio CRC" (inclusive o |
qrCode.ods |
Sim, já estou fazendo isso. Por isso que estou achando que existe algum problema na minha função, pois já estou contemplando a string exatamente dessa maneira, segue o trecho da minha função em SQL. ALTER FUNCTION [dbo].[CRC16] |
E essa pra SQL Server: https://pt.stackoverflow.com/questions/485228/como-converter-uma-fun%C3%A7%C3%A3o-crc16-em-mysql-para-sql-server (a resposta é direcionada ao Pix, inclusive). |
Boa tarde a todos, Segue solução que estou utilizando em PL/SQL: CREATE OR REPLACE FUNCTION CRC16(V_STRING VARCHAR2) RETURN VARCHAR2 IS C NUMBER; V_ANSWER VARCHAR2(4000) := 'FFFF'; V_VERIFY NUMBER; V_ID_CRC16 CHAR(2) := '63';
END CRC16; Estou utilizando Oracle Database 11g Release 11.2.0.4.0 - 64bit Production. Att, |
Boa tarde. |
Bom dia, pessoal. Eu estou usando uma solução semelhante a esta em PHP, porém notei que para resultados menores que 4095 (Hexadecimal: FFF), o tamanho não seria o 4, que é o padrão do PIX, seria 3. Para solucionar esse problema, eu adicionei um padding com zeros no início do hexadecimal, que não altera o valor final.
|
temos um validador online para QRCode EMV ? |
tente https://pix.nascent.com.br/tools/pix-qr-decoder/. |
Estou gerando dessa forma também e em alguns bancos lê de boa e no Itaú, banco do brasil e bradesco não funciona. Teve algum retorno do Itau? |
Compartilhe um exemplo de QR Code que você gerou. Somente assim poderemos apontar os erros. |
Pessoal consegui agora que funcione em todos os banco que testei. As correções que tive que fazer foram: Feito essas correções até agora está tudo funcionando. |
Olá, tenho esse payload do pix dinamico e não faço a minima ideia de por que não está sendo aceito pelo aplicativo do banco do brasil: 000201 Quem puder me ajudar fico grato. |
Bom dia. Aparentemente o seu elemento 62 (Additional Data Field Template) > 05 (Reference Label) ultrapassou o tamanho máximo de 25 caracteres, ele tem 26. Você pode fazer esse tipo de verificação da string do Qrcode nesse endereço: https://pix.nascent.com.br/tools/pix-qr-decoder/. Além disso, esse campo deve conter o valor |
No QR-Code dinâmico, o campo 62:05 deve conter apenas |
Obrigado ao reichert-lucas e rubenskuhl, final mente funcionou. Não sei se faz parte do assunto desse tópico, mas se tiver alguém para me dar uma orientação sobre notificações (PagSeguro) fico grato. |
Na última vez que olhei a API do PagSeguro, eles me parecem seguir (finalmente) a API padrão do Banco Central... então se isso for verdade para a parte de notificações, podemos tentar nessa linha. Até onde você chegou e o que não funcionou ? |
Na verdade eu nem comecei, não ficou muito claro pra mim o conceito de webhook, e como preparar o sistema para receber a notificação |
A webhook é uma forma de tu ter um retorno sobre as atualizações de um pagamento (por exemplo), basicamente, tu vai ter uma rota no teu sistema que vai estar preparada para atualizar o pagamento quando o gateway de pagamento te informar que houve um pagamento. Um exemplo pode ser do próprio pix, se tu gerar uma cobrança do pix é muito menos trabalhoso o gateway de pagamento te avisar quando o pagamento for realizado, caso contrário tu teria que ficar consultando se o pagamento foi realizado (de tempos em tempos, por exemplo de 30 em 30 segundos), e isso acaba gastando mais recursos da sua aplicação e do gateway de pagamento. |
Na API Pix tem 3 jeitos de saber que uma cobrança foi paga:
Como mesmo com o webhook é bom ter um "recuperador", comece implementando um dos outros dois. Aí parta para implementar o webhook, que normalmente requer mais traquejo de configuração de webserver do que os devs usuais tem. |
Obrigado pelas dicas rubenskuhl, eu gostaria mesmo é da Webhook, tem que implementar algum certificado, curl, ou é só pegar os dados da request mesmo? Sabe se vem em Json? |
Tem que implementar certificado, o Banco Central exige que haja mTLS na transação.
|
Segue solução que estou utilizando em PL/SQL: CREATE OR REPLACE FUNCTION CRC16(V_STRING VARCHAR2) RETURN VARCHAR2 IS C NUMBER; V_ANSWER VARCHAR2(4000) := 'FFFF'; V_VERIFY NUMBER; V_ID_CRC16 CHAR(2) := '63'; IF (C_BYTES%ROWCOUNT = 1) THEN J := (C * POWER(2,8)); FOR BITWISE IN 0..7 LOOP
END LOOP; RETURN V_ID_CRC16||V_QTD_CRC16||TRIM(TO_CHAR(V_ANSWER, 'XXXX')); END CRC16; Estou utilizando Oracle Database 11g Release 11.2.0.4.0 - 64bit Production. Att, No entiendo, ¿qué hay en la tabla XMLTABLE?, ¿de dónde sale?. |
Olá, |
Apesar de ser de outro PSP, esta documentação provavelmente resolva suas questões dada a padronização da API Pix: A questão é muito mais o web server que você utiliza (na seção seguinte a acima há exemplos de configuração para Apache, nginx e outros servidores), do que a linguagem que você utiliza. |
Senhores, tem alguém que desenvolveu o calculo do CRC16 em VBA?? peguei um que o Professor Rebson Mendes liberou mas não esta funcionando sera que alguem tem outro pra eu comparar onde estou errando?? |
Olá seria possivel converter essa função para postgresql 9? Alguém teria ela para postgresql 9+ |
Segue um exemplo de geração do PIX qr code estático todo em javascript: |
Boa tarde! Alguém já fez essa função para DataFlex? |
Neste Repositorio tem de várias linguagens - https://gist.github.com/tijnkooijmans/10981093 |
Está aqui a função em SQL (SQL Server) funcionando:
Utilização: CRC Calculado: 8209 Valide o resultado em: https://pix.nascent.com.br/ |
E uma função que cria o QRCode a partir do location, value, merchant e city.
Valeu!! |
Complementando a resposta do duducosta
|
Percebi que muitos QR CODE estão sendo enviados com CRC 16 calculado invalido.
E pouquíssimos PSP's pagadores estão validando tanto o CRC16 quanto o padrão do EMV Merchant Presented Mode como um todo.
Quanto a Estrutura EMV, pelo que eu observei não estão sendo validados:
A maioria dos PSPs estão aceitando QR CODEs conforme listado abaixo, provavelmente os único bancos que estão tentando realizar as consistências do Padrão EMV e também dos certificados dos sites QR CODE dinâmico são Itaú e Banco do Brasil.
Exemplo:
Iniciado de forma incorreta >>> 0020101021226990014br.gov.bcb.pix2577qrcode.pix.bancobmg.com.br/qrs1/01mWFiCMHqRMdrkzWFWazsiurgfoqpsJFbuXx3IcpRqfj52040000530398654040.015802BR5917JEFFERSON F SOUZA6009SAO PAULO62290525QRS1-F5CMMUTDLOVWF8UBT7Q4630413DF -> calculado errado deveria ser 2E7D
Mal formatado
000201
2640
0014BR.GOV.BCB.PIX
0114+55149916479660200
52040000
5303986
54030.05
802BR5921JULIO DE SOUZA RUGOLO6009SAO.PAULO6238050050300017BR.GOV.BCB.BRCODE01051.0.06304BD79
CRC 16 invalido
00020126360014BR.GOV.BCB.PIX0114+55339999117485204000053039865802BR5924LEANDRO
ALVES PEREIRA 6009SAO.PAULO623450300017BR.GOV.BCB.BRCODE01051.0.063044867 -> deveria ser C3F4.
Mal formatado
000201
010212
2641
0005Cielo< deveria ser indicação de BR CODE -> 14br.gov.bcb.pix
0116001019064975000102087748103252040000530398654120000000031005802BR5921AUTO POSTO BASE AEREA6011CURITIBA PR801010033"https://www.cielo.com.br/qrcode"0116111117082C14677A0212171120183512030420000404000105020106020163043256
Mal formatado
000201
2653
0014BR.GOV.BCB.PIX
0127takeshinho2001@yahoo.com.br
0200 tamanho 00 não é permitido pelo padrão EMV.
52040000530398654030.05802BR5922ANTONIO TAKESHI FUKUDA6009SAO.PAULO6238050050300017BR.GOV.BCB.BRCODE01051.0.063045B1A
Merchant Name
000201
2636
0014br.gov.bcb.pix
0114+5531998925047
52040000
5303986
54071000.00
5802BR
5938SUELI DO CARMO PEREIRA DA SILVA KUSTER -- Limite de 25 caracteres
6008CONTAGEM
6241
0503***
5030
0017br.gov.bcb.brcode
01051.0.0
63049602
Mal Formatado (nubank)
000201
2662
0014BR.GOV.BCB.PIX
013639b6c11f-8383-4378-87c1-ce62df204ab8
0200 <<< NÃO PODE SER TAMANHO 00
5204000053039865406127.505802BR5925LARISSA JUSTUS RAYMUNDO 36009SAO PAULO61080540900062160512NUomZK5qzGvA630440BB
Mal Formatado (nubank)
000201
2672
0014BR.GOV.BCB.PIX 18
01366ae8a1ab-8a46-49ef-9a14-6b03df474f6a 40
0210Toma lim㯵2
040000
530398654046.005802BR5924F D C HUMMEL EIRELI - ME6009SAO PAULO61080540900062160512NUNFFQwm3oLJ63040974
The text was updated successfully, but these errors were encountered: