Boa tarde. A quem interessar, segue uma implementação simples do brcode em python:
____________________________________________________
import crcmod
from collections import OrderedDict
from unicodedata import normalize
import re
from decimal import Decimal
def _pix_normalized_data(d, k):
if k == 'URL':
return d.split('//')[-1]
if k == 'VALOR':
if not isinstance(d, Decimal):
return Decimal(d)
return d
if k in ['CIDADE']:
k.upper()
r = normalize('NFKD', unicode(d)).encode('ASCII','ignore').decode('ascii')
return re.sub(r'([^0-9a-zA-Z\-\+\s_@\.])', '', r)
def gerar(dados):
qr_str = "000201010212"
estrutura = OrderedDict()
estrutura["URL"] = lambda d: "26%02d0014br.gov.bcb.pix25%02d%s" % (len(d)+22,len(d), d.strip())
estrutura["MERCHANT_CAT_CODE"] = lambda d: "52040000"
estrutura["CURRENCY"] = lambda d: "5303986"
estrutura["VALOR"] = lambda d: "54%02d%.2f" % (len('%.2f' % d), d)
estrutura["COUNTRY_CODE"] = lambda d: "5802%s" % 'BR'
estrutura["RECEBEDOR"] = lambda d: "59%02d%s" % (len(d), d[:99])
estrutura["CIDADE"] = lambda d: "60%02d%s" % (len(d), d[:99])
estrutura['IDTRANSACAO'] = lambda d: "62%02d05%d%s" % (len(d)+4, len(d), d)
for k,f in estrutura.items():
qr_str += f(_pix_normalized_data(dados.get(k), k))
qr_str += "6304"
crc16 = crcmod.mkCrcFun(0x11021, rev=False, initCrc=0xffff, xorOut=0x0000)
qr_str += hex(crc16(qr_str)).split('x')[1]
return qr_str
qrcode_dados = {}
qrcode_dados['RECEBEDOR'] = 'Fulano de Tal'
qrcode_dados['VALOR'] = 123.45
qrcode_dados['CIDADE'] = 'BRASILIA'
qrcode_dados['URL'] = 'bx.com.br/pix/8b3da2f3-9a41-40d1-a91a-bd93113bd441'
qrcode_dados['IDTRANSACAO'] = 'RP12345678-2019'
print(gerar(qrcode_dados))