Ir para conteúdo
Fórum Script Brasil
  • 0

Boleto Bancário Do Hsbc


Pilantra

Pergunta

12 respostass a esta questão

Posts Recomendados

  • 0

Eu achei um também> www.netdinamica.com.br

Acho que fica mais barato se agente rachar no meio =DD

Mas esse mês eu to duro, vou tentar procurar mais um pouco, senão vou ter que montar um. No site do HSBC parece que tem as dicas de como montar um do zero. Vai demorar pra caramba mas já está atrasado mesmo hehehe!!

E se alguém achar alguma coisa aí, compartilha com os companheiros :lol:

falou

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

Se você quiser posso te orientar a encontrar a linha digitavel e gerar o código de barras. Não é uma coisa lá de outro mundo, com certeza vai perder alguma ou várias horas para desenvolver, mais depois que você consegue fica tudo fácil...

Link para o comentário
Compartilhar em outros sites

  • 0

Então eu vou dar uma adiantada no seu serviço e na ajuda do visitate não registrado.

O arquivo abaixo contém:

A explicação de como gerar a linha digitável e os números do código de barras do HSBC,

O layout de impressão do boleto retirado do site da net dinâmica,

Documentação técnica da FEBRABAN - Bloqueto de Cobrança modelo CADOC 24044-4.

Documentacao_HSBC.zip

E aqui um código que fiz para gerar o gráfico do código de barras:

Modo de uso:

<img style="width:406px; height:50px;" src="bar_code.php?valor=<?=$codigo_barras; ?>" />

<?
/******************************************************************
// ARQUIVO ...: Gera código de barras I25 
// BY ........: mrkalvin     
// DATA ......: 18/03/2006              
/******************************************************************/

/*
ASPECTOS TÉCNICOS DO CÓDIGO DE BARRAS PARA BOLETOS BANCÁRIOS SEGUNDO REGULAMENTAÇÃO DA FEBRABAN

A) O Código de Barras utilizado, é do tipo "2 de 5 intercalado (I25)":

    Nota 1: "2 de 5" significa que 5 barras definem 1 caracter, sendo que duas delas são barras largas;
    Nota 1a: 0 (Zero) significa estreito e 1 (Um) significa largo,
            ex: caracter três = "11000" e caracter quatro = "00101"
                cada um deles com duas barras largas (algarismo 1).
    
    Nota 2: "Intercalado" significa que os espaços entre as barras também tem significado, de maneira análoga as barras;
    Nota 2a: Os caractéres devem ser agrupados em pares, o 1º é preto e o 2º é branco,
            ex: 34, as barras do caracter três serão pretas e do caracter quatro serão brancas.

    Nota 2b: As barras dos caractéres preto e branco são respectivamente intercaladas;
            ex: caracter três = "11000" e caracter quatro = "00101"
            intercalando: "1010010001"
            
            intercalando: pret bran pret bran pret bran pret bran pret bran
            intercalando:   1    0    1    0    0    1    0    0    0    1
            intercalando: 3[1] 4[1] 3[2] 4[2] 3[3] 4[3] 3[4] 4[4] 3[5] 4[5]
    
    Nota 3: Este tipo de barras trabalha somente com caracteres numéricos.

B) O tamanho do campo do Código de Barras é de 46 posições:
    1 Bit de Start;
    44 Bits para conteúdo;
    1 Bit de Stop.
    
C) Dimensão: 103 mm de comprimento por 13 mm de altura [406px X 50px].

D) Posição: 12 mm desde a margem inferior da ficha até o centro do código de barras
            5 mm da lateral esquerda do formulário até o início do código de barras (zona de silêncio).

*/
    
function barcode($CodBar){
    // +----------------------------------------------------------------------+
    // | Cria o layout binário do Código de barras                            |
    // +----------------------------------------------------------------------+
    
    /* Variáveis do layout binário */
    $bit_inicio = "0000";
    $bit_fim = "1000";
    $binario = array(0 => "00110", 1 => "10001", 2 => "01001", 3 => "11000", 4 => "00101", 5 => "10100", 6 => "01100", 7 => "00011", 8 => "10010", 9 => "01010");
    
    //Distribui os caractéres em pares: $i=$i+2;
    for($i=0; $i<strlen($CodBar); $i+=2){      
        $Bar_pret = $binario[$CodBar[$i]];
        $Bar_bran = $binario[$CodBar[$i+1]]; 
        
        //Intercala as barras, cada algarismo possui 5 barras » 0 a 4
        for ($j=0; $j<=4; $j++){
            $bit_conteudo .= $Bar_pret[$j].$Bar_bran[$j];
        }
    }
    //Organiza as 46 posições do código de barras
    $layout = $bit_inicio.$bit_conteudo.$bit_fim;
    
    // +----------------------------------------------------------------------+
    // | Cria o layout gráfico do Código de barras                            |
    // +----------------------------------------------------------------------+
    
    /* Variáveis da imagem */

    //comprimento = (bit_inicio) +    (bit_conteudo)    +    (bit_fim);
    //comprimento =     (4*1)    + ( ((3*1)+(2*3))*44 ) + ((3*1) + (1*3));
    $comprimento = 406;
    $altura = 50;
    $img = imageCreate($comprimento, $altura);
    $pret = imageColorAllocate($img, 0, 0, 0);
    $bran = imageColorAllocate($img, 255, 255, 255);
    $pos = 0;
    
    //Trasforma cada algarismo binário em gráfico
    for($i=0; $i<strlen($layout); $i++){
        //identifica a espessura da barra
        if($layout[$i] == "0"){$epessura = 1;}elseif($layout[$i] == "1"){$epessura = 3;}
        
        //gera a barra propriamente dita
        if(($i % 2) <> 0){
            //se $i for ímpar (barra branca)
            imagefilledrectangle($img, $pos, 0, ($pos + $epessura), $altura, $bran);
            $pos = $pos + $epessura;
        }else{
            //se $i for 0 ou par (barra preta)
            imagefilledrectangle($img, $pos, 0, ($pos + $epessura), $altura, $pret);
            $pos = $pos + $epessura;
        }
    }
    
    // +----------------------------------------------------------------------+
    // | Cria a imagem para utilização no browser                             |
    // +----------------------------------------------------------------------+

    //Envia os cabeçalhos para o browser
    header("Cache-Control: no-store, no-cache");
    header("Content-type: image/png");
    
    //Envia uma imagem PNG para o browser
    imagepng($img);
    
    //Exclui a imagem da memória
    imagedestroy($img);
}

//$_REQUEST['valor'] = "34191183400000292011090000107160253500375000";
if(isset($_REQUEST['valor']) && is_numeric($_REQUEST['valor']) && strlen($_REQUEST['valor']) == 44){
    barcode($_REQUEST['valor']);
}else{
    header("Location: ../valor_incorreto.php");
}
?>

A linha digitável e o nº do código de barras é por sua conta ;)

Espero que ajude.

PS: Se realmente tiver paciência para fazer código poste ele futuramente, poderá ter utilidade para muita gente.

Link para o comentário
Compartilhar em outros sites

  • 0

Aqui eu uso o boleto do itaú, mas acho que as funções "Modulo11", e "calculaFatorVencimento" podem ser reaproveitadas. Veja o código:

<?php

     /*

   www.poser.com.br - Diário da Marina
         ____       ___         & Believer
       / __ )___  / (_)__ _   _____  _____
      / __  / _ \/ / / _ \ | / / _ \/ ___/
     / /_/ /  __/ / /  __/ |/ /  __/ /
    /_____/\___/_/_/\___/|___/\___/_/

   www.oversys.com.br - Oversys Assessoria e
                           Consultoria Ltda


     Criado por Ariovaldo Junior - BELIEVER


     em 04/03/2005 (véspera do meu aniversário)

     Agradeço a minha muié (por deixar eu perder tempo desenvolvendo isso),
     a Deus (por permitir que eu me case sem tirar 1 centavo do bolso), ao
     meu sócio (por me desafiar a desenvolver novidades), à comunidade PHPBRASIL
     (que tem ajudado em muito a todos que desejam aprender um pouco mais),
     à minha família, ao Texas Lanches (pela Skol geladinha e pelas mesas de sinuca
     de qualidade) e ao Corinthians Paulista (que se Deus permitir, esse ano
     ganhará o Brasileirão... VAI PASSARELLA! VAI TEVEZ!).

     Copie livremente.
     Distribua livremente.
     Tire até meus créditos se quiser.
     Só não se esqueça de ser verdadeiramente livre.

     Contatos:
              believer@poser.com.br

*/

// INÍCIO DA ÁREA DE CONFIGURAÇÃO

    $codigobanco = '341'; // O Itau sempre será este número
    $agencia = '0148'; // 4 posições
    $conta = '34851';  // 5 posições sem dígito
    $carteira = '175'; // A sem registro é 175 para o Itaú
    $moeda = '9'; // Sempre será 9 pois deve ser em Real
    $nossonumero = '51'; // Número de controle do Emissor (pode usar qualquer número de até 8 digitos);
    $data = '05/03/2005'; // Data de emissão do boleto
        $vencimento = '05/03/2006'; // Data no formato dd/mm/yyyy
        $valor = '666.06'; // Colocar PONTO no formato REAIS.CENTAVOS (ex: 666.01)

// NOS CAMPOS ABAIXO, PREENCHER EM MAIÚSCULAS E DESPREZAR ACENTUAÇÃO, CEDILHAS E
// CARACTERES ESPECIAIS (REGRAS DO BANCO)

    $cedente = 'OVERSYS ASSESSORIA E CONSULTORIA LTDA';

    $sacado = 'ORGANIZACOES TABARAJA';
    $endereco_sacado = 'RUA DA RUA, 666';
    $cidade = 'UBERLANDIA';
    $estado = 'MG';
        $cep = '38400-000';
        $cpf_cnpj = 'CPF 000.000.000-00';

        $instrucoes1 = 'COBRAR 10,90 POR DIA DE ATRASO';
        $instrucoes2 = 'não ACEITAR DEPOIS DE 15/02';
        $instrucoes3 = 'SUJEITO A PROTESTO';
        $instrucoes4 = '';
        $instrucoes5 = 'WWW.POSER.COM.BR';

// FIM DA ÁREA DE CONFIGURAÇÃO






    function Modulo11($valor) {
            $multiplicador = '4329876543298765432987654329876543298765432';
            for ($i = 0; $i<=42; $i++ ) {
                 $parcial = $valor[$i] * $multiplicador[$i];
                         $total += $parcial;
            }
            $resultado = 11-($total%11);
            if (($resultado >= 10)||($resultado == 0)) {
                 $resultado = 1;
            }

            return $resultado;
    }


    function calculaDAC ($CalculaDAC) {
            $tamanho = strlen($CalculaDAC);
            for ($i = $tamanho-1; $i>=0; $i--) {
                if ($multiplicador !== 2) {
                    $multiplicador = 2;
                }
                else {
                    $multiplicador = 1;
                }
                $parcial = strval($CalculaDAC[$i] * $multiplicador);

                if ($parcial >= 10) {
                    $parcial = $parcial[0] + $parcial[1];
                }
                $total += $parcial;
            }
            $total = 10-($total%10);
            if ($total >= 10) {
                    $total = 0;
            }
            return $total;
    }

    function calculaValor ($valor) {
            $valor = str_replace('.','',$valor);
            return str_repeat('0',(10-strlen($valor))).$valor;
    }

    function calculaNossoNumero ($valor) {
            return str_repeat('0',(8-strlen($valor))).$valor;
    }

    function calculaFatorVencimento ($dia,$mês,$ano) {
             $vencimento = mktime(0,0,0,$mês,$dia,$ano)-mktime(0,0,0,7,3,2000);
             return ceil(($vencimento/86400)+1000);
    }

// CALCULO DO CODIGO DE BARRAS (SEM O DAC VERIFICADOR)
    $codigo_barras = $codigobanco.$moeda.calculaFatorVencimento(substr($vencimento,0,2),substr($vencimento,3,2),substr($vencimento,6,4));
    $codigo_barras .= calculaValor($valor).$carteira.calculaNossoNumero($nossonumero).calculaDAC($agencia.$conta.$carteira.calculaNossoNumero($nossonumero)).$agencia.$conta.calculaDAC($agencia.$conta).'000';



// CALCULO DA LINHA DIGITÁVEL
    $parte1 = $codigobanco.$moeda.substr($carteira,0,1).substr($carteira,1,2).substr(calculaNossoNumero($nossonumero),0,2);
    $parte1 = substr($parte1,0,5).'.'.substr($parte1,5,4).calculaDAC($parte1);

    $parte2 = substr(calculaNossoNumero($nossonumero),2,5).substr(calculaNossoNumero($nossonumero),7,1).calculaDAC($agencia.$conta.$carteira.calculaNossoNumero($nossonumero)).substr($agencia,0,3);
    $parte2 = substr($parte2,0,5).'.'.substr($parte2,5,5).calculaDAC($parte2);

    $parte3 = substr($agencia,3,1).$conta.calculaDAC($agencia.$conta).'000';
    $parte3 = substr($parte3,0,5).'.'.substr($parte3,5,8).calculaDAC($parte3);

    $parte5 = calculaFatorVencimento(substr($vencimento,0,2),substr($vencimento,3,2),substr($vencimento,6,4)).calculaValor($valor);

    $numero_boleto = $parte1.' '.$parte2.' '.$parte3.' '.Modulo11($codigo_barras).' '.$parte5;

// INSERÇÃO DO DAC NO CODIGO DE BARRAS

   $codigo_barras = substr($codigo_barras,0,4).Modulo11($codigo_barras).substr($codigo_barras,4,43);
//   print Modulo11($codigo_barras);
//   exit;

?>

Link para o comentário
Compartilhar em outros sites

  • 0

Me interessei em desenvolver também, mas meu tempo tá escasso... =(

Pelo menos por enquanto...

Tem um site de um grupo de desenvolvedores, que estão se empenando em fazer os sistemas de vários bancos. O do HSBC está 50% concluido. Lá tem o do BB e UNIBANCO funcionando, mas ainda não testei...

http://www.boletophp.com.br/

Qualquer coisa, Pilantra, se cadastra como voluntário no desenvolvimento! Abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

abra o arquivo "boleto_unibanco.php" e altere conforme as instruções do próprio arquivo

// ------------------------- DADOS DINÂMICOS DO SEU CLIENTE PARA A GERAÇÃO DO BOLETO (FIXO OU VIA GET) -------------------- //
// Os valores abaixo podem ser colocados manualmente ou ajustados p/ formulário c/ POST, GET ou de BD (MySql,Postgre,etc)    //

// DADOS DO BOLETO PARA O SEU CLIENTE
$dias_de_prazo_para_pagamento = 5;
$taxa_boleto = 2.95;
$data_venc = date("d/m/Y", time() + ($dias_de_prazo_para_pagamento * 86400));  // Prazo de X dias OU informe data: "13/04/2006"; 
$valor_cobrado = "2950,00"; // Valor - REGRA: Tanto faz com "." ou "," ou com 1 ou 2 ou sem casa decimal
$valor_boleto=number_format($valor_cobrado+$taxa_boleto, 2, ',', '');

$dadosboleto["nosso_numero"] = "1803029901";  // Nosso numero - REGRA: Máximo de 14 caracteres!
$dadosboleto["numero_documento"] = "18.030299.01";    // Num do pedido ou do documento
$dadosboleto["data_vencimento"] = $data_venc; // Data de Vencimento do Boleto - REGRA: Formato DD/MM/AAAA
$dadosboleto["data_documento"] = date("d/m/Y"); // Data de emissão do Boleto
$dadosboleto["data_processamento"] = ""; // Data de processamento do boleto (opcional)
$dadosboleto["valor_boleto"] = $valor_boleto;     // Valor do Boleto - REGRA: Com vírgula e sempre com duas casas depois da virgula

// DADOS DO SEU CLIENTE
$dadosboleto["sacado"] = "José da Silva";
$dadosboleto["endereco1"] = "Rua ABC";
$dadosboleto["endereco2"] = "São Paulo - SP - CEP: 010200-000";

// INFORMACOES PARA O CLIENTE
$dadosboleto["demonstrativo"] = "Pagamento de Compra na Loja Nonononono";
$dadosboleto["instrucoes"] = "Mensalidade referente a nonon nonooon nononon<br>Taxa bancária - R$ ".$taxa_boleto;
$dadosboleto["instrucoes1"] = "BoletoPhp - http://www.boletophp.com.br";
$dadosboleto["instrucoes2"] = "- Sr. Caixa, cobrar multa de 2% após o vencimento";
$dadosboleto["instrucoes3"] = "- Receber até 10 dias após o vencimento";
$dadosboleto["instrucoes4"] = "- Em caso de dúvidas entre em contato conosco: xxxx@xxxx.com.br";

// DADOS OPCIONAIS DE ACORDO COM O BANCO OU CLIENTE
$dadosboleto["quantidade"] = "";
$dadosboleto["valor_unitario"] = "";
$dadosboleto["aceite"] = "";        
$dadosboleto["uso_banco"] = "";     
$dadosboleto["especie"] = "R$";
$dadosboleto["especie_doc"] = "DM";


// ---------------------- DADOS FIXOS DE CONFIGURAÇÃO DO SEU BOLETO --------------- //

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Elizeu Alcantara

Olá pessoALL, tudo bem?

Apenas para o acompanhamento de todos, foi colocado a disposição a nova versão do BoletoPhp - Versão 0.05 , com a inclusão do Banco HSBC (alem do BB,Caixa,Itau e Unibanco), que foi concluído com a colaboração de um dos desenvolvedores voluntários do projeto.

O objetivo deste projeto é criar um sistema open-source de de Sistema de Boletos bancários em PHP que seja mais simples do que o PhpBoleto e que se estenda ao desenvolvimento de boletos dos bancos mais usados no mercado, para uso em qualquer aplicação que use PHP.

O BoletoPhp é de Código Aberto e de Livre Distribuição conforme Licença GPL

Estamos a procura por desenvolvedores que dominem bem a tecnologia e programação do OsCommerce, para que nos ajudasse a analisar o código do módulo que desenvolvi do BoletoPhp para uso no OsCommerce (para aprimorar o código), antes de disponibilizarmos aqui e em outros fóruns e no site do BoletoPhp e para todos aqueles que querem ter uma solução free de boletos (sem precisar usar soluções comerciais que existem por ai). Se voce pode ajudar nisto, entre em contato pelo boletophp@boletophp.com.br

Site: www.boletophp.com.br

Um grande abraço,

Elizeu Alcantara

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...