Crate pix_brcode_parser

Source
Expand description

§PIX BR Code Parser

Uma biblioteca Rust para análise e validação de códigos QR PIX (BR Code) brasileiros seguindo o padrão EMV QRCPS (QR Code Payment System).

§Características

  • Análise de códigos QR PIX estáticos e dinâmicos
  • Validação de conformidade com EMV QRCPS
  • Validação de checksum CRC16
  • API ergonômica com structs tipadas
  • Suporte opcional ao serde para serialização
  • Análise zero-allocation para aplicações críticas de performance
  • Geração de códigos QR PIX
  • Classificação automática de tipos de chave PIX

§Início Rápido

§Analisando um Código PIX

use pix_brcode_parser::{parse_brcode, BRCodeError};

let qr_string = "00020126580014br.gov.bcb.pix0136123e4567-e12b-12d1-a456-426614174000520400005303986540510.005802BR5913FULANO DE TAL6008BRASILIA62070503***630436D9";
 
match parse_brcode(qr_string) {
    Ok(brcode) => {
        println!("✅ Código PIX válido!");
        println!("Chave PIX: {}", brcode.merchant_account_info.pix_key);
        println!("Tipo da Chave: {:?}", brcode.pix_key_type());
        println!("Comerciante: {}", brcode.merchant_name);
        println!("Cidade: {}", brcode.merchant_city);
         
        if let Some(amount) = &brcode.transaction_amount {
            println!("Valor: R$ {}", amount);
        } else {
            println!("Valor: A ser definido pelo usuário");
        }
    }
    Err(e) => eprintln!("❌ Erro ao analisar código PIX: {}", e),
}

§Gerando um Código PIX

use pix_brcode_parser::{BRCode, MerchantAccountInfo, generate_brcode};

let brcode = BRCode {
    payload_format_indicator: "01".to_string(),
    point_of_initiation_method: Some("11".to_string()), // Estático
    merchant_account_info: MerchantAccountInfo {
        gui: "br.gov.bcb.pix".to_string(),
        pix_key: "user@example.com".to_string(),
        description: Some("Pagamento por serviços".to_string()),
        url: None,
    },
    merchant_category_code: "0000".to_string(),
    transaction_currency: "986".to_string(), // BRL
    transaction_amount: Some("25.50".to_string()),
    country_code: "BR".to_string(),
    merchant_name: "ACME CORP".to_string(),
    merchant_city: "SAO PAULO".to_string(),
    additional_data: None,
    crc16: String::new(), // Será calculado automaticamente
};
 
match generate_brcode(&brcode) {
    Ok(qr_string) => {
        println!("Código QR gerado: {}", qr_string);
    }
    Err(e) => {
        eprintln!("Erro ao gerar código: {}", e);
    }
}

§Tipos de Chave PIX

use pix_brcode_parser::{classify_pix_key, PixKeyType};

// Diferentes tipos de chave PIX suportados
assert_eq!(classify_pix_key("123e4567-e89b-12d3-a456-426614174000"), PixKeyType::Uuid);
assert_eq!(classify_pix_key("usuario@exemplo.com"), PixKeyType::Email);
assert_eq!(classify_pix_key("+5511999999999"), PixKeyType::Phone);
assert_eq!(classify_pix_key("12345678901"), PixKeyType::Cpf);
assert_eq!(classify_pix_key("12345678000195"), PixKeyType::Cnpj);

§Tratamento de Erros

use pix_brcode_parser::{parse_brcode, BRCodeError};

match parse_brcode("codigo_invalido") {
    Err(BRCodeError::InvalidChecksum) => {
        println!("Checksum inválido - código pode estar corrompido");
    }
    Err(BRCodeError::InvalidGui(gui)) => {
        println!("GUI inválido: esperado 'br.gov.bcb.pix', encontrado: {}", gui);
    }
    Err(BRCodeError::MissingField(field)) => {
        println!("Campo obrigatório ausente: {}", field);
    }
    _ => {}
}

§Validações

Esta biblioteca implementa todas as validações necessárias:

  • Checksum CRC16: Validação completa usando CRC-16/CCITT-FALSE
  • GUI PIX: Deve ser “br.gov.bcb.pix”
  • Código da Moeda: Deve ser “986” (Real Brasileiro)
  • Código do País: Deve ser “BR”
  • Limites de Campo: Nome do comerciante (25 chars), cidade (15 chars)
  • Formato da Chave PIX: Validação de caracteres e formato

Re-exports§

pub use error::BRCodeError;
pub use parser::parse_brcode;
pub use parser::generate_brcode;
pub use validation::validate_crc16;
pub use types::*;

Modules§

error
Error types for PIX BR Code parsing
parser
Parser implementation for PIX BR Code QR strings
types
Type definitions for PIX BR Code data structures
validation
CRC16 validation and other validation utilities for PIX BR Code

Functions§

parse
Parse a PIX BR Code string into a structured format