Utilidades
calculate_crc16(payload)
Calcula o checksum CRC16-CCITT do payload.
O cálculo é realizado conforme o padrão EMV® QRCPS, que utiliza o polinômio 0x1021 e valor inicial 0xFFFF. O resultado é uma string hexadecimal de 4 caracteres.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
payload
|
str
|
O payload completo (sem o campo do CRC) para o qual o checksum será calculado. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
str |
str
|
O checksum CRC16 calculado, formatado como uma string hexadecimal de 4 caracteres maiúsculos. |
Examples:
>>> payload_exemplo = "00020126360014BR.GOV.BCB.PIX0114+5561999999999520400005303986540510.005802BR5913FULANO DE TAL6008BRASILIA62070503***6304"
>>> calculate_crc16(payload_exemplo)
'E3A2'
Source code in src\pixcore\utils.py
format_tlv(id_field, value)
Formata um campo no padrão TLV (Type-Length-Value).
O formato TLV é composto por: - ID (Type): Identificador do campo (2 dígitos). - Length: Tamanho do valor (2 dígitos). - Value: O dado em si.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
id_field
|
str
|
O identificador do campo (ID ou "Tag"). |
required |
value
|
str
|
O valor do campo. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
str |
str
|
A string formatada em TLV. Ex: "5913NOME DO LOJA". |
Examples:
Source code in src\pixcore\utils.py
parse_tlv(payload)
Parseia uma string de payload no formato TLV e retorna os campos.
Esta função atua como um gerador, processando a string do payload de forma iterativa. A cada iteração, ela lê um campo completo (ID, Tamanho, Valor) e o retorna como uma tupla (ID, Tamanho, Valor).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
payload
|
str
|
A string contendo múltiplos campos TLV concatenados. |
required |
Yields:
| Type | Description |
|---|---|
Tuple[str, int, str]
|
Generator[Tuple[str, int, str], None, None]: Uma tupla contendo (ID, Tamanho, Valor). |
Raises:
| Type | Description |
|---|---|
DecodificacaoPayloadError
|
Se a string de tamanho (length) não for um número válido, indicando um payload malformado. |