//campo livre (sem dv) é 24 digitos $campo_livre = $conta_cedente . $conta_cedente_dv . formata_numero($dadosboleto["nosso_numero1"], 3, 0) . formata_numero($dadosboleto["nosso_numero_const1"], 1, 0) . formata_numero($dadosboleto["nosso_numero2"], 3, 0) . formata_numero($dadosboleto["nosso_numero_const2"], 1, 0) . formata_numero($dadosboleto["nosso_numero3"], 9, 0); //dv do campo livre $dv_campo_livre = digitoVerificador_nossonumero($campo_livre); $campo_livre_com_dv = "{$campo_livre}{$dv_campo_livre}"; //nosso número (sem dv) é 17 digitos $nnum = formata_numero($dadosboleto["nosso_numero_const1"], 1, 0) . formata_numero($dadosboleto["nosso_numero_const2"], 1, 0) . formata_numero($dadosboleto["nosso_numero1"], 3, 0) . formata_numero($dadosboleto["nosso_numero2"], 3, 0) . formata_numero($dadosboleto["nosso_numero3"], 9, 0); //nosso número completo (com dv) com 18 digitos $nossonumero = $nnum . digitoVerificador_nossonumero($nnum); // 43 numeros para o calculo do digito verificador do codigo de barras $dv = digitoVerificador_barra("{$codigobanco}{$nummoeda}{$fator_vencimento}{$valor}{$campo_livre_com_dv}", 9, 0); // Numero para o codigo de barras com 44 digitos $linha = "{$codigobanco}{$nummoeda}{$dv}{$fator_vencimento}{$valor}{$campo_livre_com_dv}"; $agencia_codigo = $agencia . " / " . $conta_cedente . "-" . $conta_cedente_dv; $dadosboleto["codigo_barras"] = $linha; $linhaDigitavel = monta_linha_digitavel($linha); $dadosboleto["linha_digitavel"] = $linhaDigitavel; $dadosboleto["agencia_codigo"] = $agencia_codigo; $dadosboleto["nosso_numero"] = $nossonumero; $dadosboleto["codigo_banco_com_dv"] = $codigo_banco_com_dv; function digitoVerificador_nossonumero($numero) { $resto2 = modulo_11($numero, 9, 1); $digito = 11 - $resto2; if ($digito == 10 || $digito == 11) { $dv = 0; } else { $dv = $digito; } return $dv; }
//dv do nosso número $dv_nosso_numero = digitoVerificador_nossonumero($nnum); $nossonumero_dv = "{$nnum}{$dv_nosso_numero}"; //conta cedente (sem dv) é 11 digitos $conta_cedente = formata_numero($dadosboleto["conta_cedente"], 11, 0); //dv da conta cedente $conta_cedente_dv = formata_numero($dadosboleto["conta_cedente_dv"], 1, 0); $ag_contacedente = $agencia . $conta_cedente; // 43 numeros para o calculo do digito verificador do codigo de barras $dv = digitoVerificador_barra("{$codigobanco}{$nummoeda}{$fator_vencimento}{$valor}{$nnum}{$ag_contacedente}", 9, 0); // Numero para o codigo de barras com 44 digitos $linha = "{$codigobanco}{$nummoeda}{$dv}{$fator_vencimento}{$valor}{$nnum}{$ag_contacedente}"; $nossonumero = substr($nossonumero_dv, 0, 10) . '-' . substr($nossonumero_dv, 10, 1); $agencia_codigo = $agencia . " / " . $conta_cedente . "-" . $conta_cedente_dv; $dadosboleto["codigo_barras"] = $linha; $dadosboleto["linha_digitavel"] = monta_linha_digitavel($linha); $dadosboleto["agencia_codigo"] = $agencia_codigo; $dadosboleto["nosso_numero"] = $nossonumero; $dadosboleto["codigo_banco_com_dv"] = $codigo_banco_com_dv; function digitoVerificador_nossonumero($numero) { $resto2 = modulo_11($numero, 9, 1); $digito = 11 - $resto2; if ($digito == 10 || $digito == 11) { $dv = 0; } else { $dv = $digito; } return $dv; } function digitoVerificador_barra($numero)
//conta é 7 digitos $conta = formata_numero($dadosboleto["conta"], 7, 0); //nosso número: 13 digitos $nossonum = formata_numero($dadosboleto["nosso_numero"], 13, 0); // Calcula o Digitão da Cobrança $digitao = modulo_10($nossonum . $agencia . $conta); if ($digitao == 10) $digitao = 0; // 43 numeros para o calculo do digito verificador do codigo de barras $dv = modulo_11($codigobanco . $nummoeda . $fator_vencimento . $valor . $agencia . $conta . $digitao . $nossonum, 9, 1); $dv = ($dv == 0 || $dv == 1) ? 1 : 11 - $dv; // Dados finais $dadosboleto["codigo_barras"] = $codigobanco . $nummoeda . $dv . $fator_vencimento . $valor . $agencia . $conta . $digitao . $nossonum; $dadosboleto["linha_digitavel"] = monta_linha_digitavel($codigobanco . $nummoeda . $agencia . $conta . $digitao . $nossonum . $dv . $fator_vencimento . $valor); $dadosboleto["agencia_codigo"] = $agencia . '/' . $conta . '/' . $digitao; $dadosboleto["nosso_numero"] = $nossonum; $dadosboleto["codigo_banco_com_dv"] = $codigo_banco_com_dv; // FUNÇÕES // Algumas foram retiradas do Projeto PhpBoleto e modificadas para atender as particularidades de cada banco function formata_numero($numero,$loop,$insert,$tipo = "geral") { if ($tipo == "geral") { $numero = str_replace(",","",$numero); while(strlen($numero)<$loop){ $numero = $insert . $numero; } } if ($tipo == "valor") {