Mauro Costa Jr.
Digito Verificador
06 de February de 2004 às 06:59PM
Alguém ai tem uma função para calculo de digito verificador pelo módulo 10?
Newton Wagner
Re: Digito Verificador
06 de February de 2004 às 07:49PM
Vc quer fazer calculo de cpf? se for acho que tem um script aqui no PHPBrasil disso.. :D
Mauro Costa Jr.
Re: Digito Verificador
06 de February de 2004 às 10:58PM
Na verdade naum. Estou desenvolvendo uma aplicação q gera codigo de barras. Dai preciso criar uma linha digitavel q fica impressa em cima do código para ser usada se o leitor de barras falhar.

É algo do tipo: 9999999999-9

O problema dos scripts para cpf é q eles calculam digito verificador de duas casas. Eu preciso de apenas uma casa.
Valdeci Monteiro
Re: Digito Verificador
07 de February de 2004 às 05:24AM
Mauro, que padrão de código de barras você está usando? Pelo que sei cada código de barras tem um padrão próprio para cálculo do dígito. Se você postar essa informação, talvez eu possa te ajudar.
Mauro Costa Jr.
Re: Digito Verificador
07 de February de 2004 às 10:00PM
Oi, Valdeci!

Estou trabalhando com o padrão da FEBRABAM e a string do código de barras tem 44 caracteres.

O problema eh q tenho q colocar uma linha digitavel em cima da impressao das barras. Essa linha de 44 digitos precisa ser dividida em 4 sequencias de 11 caracteres com um digito verificador em cada. Isso eh feito para facilicar a digitação.

Assim teremos:

99999999999-9 99999999999-9 99999999999-9 99999999999-9


Por isso preciso de uma função q calcula esses digitos para mim.
Mauro Costa Jr.
Re: Digito Verificador
07 de February de 2004 às 10:02PM
Alias, desculpe, a grafia correta é FEBRABAN (Federeção Brasileira dos Bancos).
Valdeci Monteiro
Re: Digito Verificador
10 de February de 2004 às 03:24AM
Mauro, não sei como é feito o cálculo do dígito da FEBRABAN. Talvez você possa achar alguma informação no site deles: www.febraban.com.br
Valdeci Monteiro
Re: Digito Verificador
10 de February de 2004 às 03:34AM
Mauro encontrei uma informação no site da FEBRABAN. Acesse o link abaixo:
http://www.febraban.com.br/Arquivo/Servicos/Downloads/download_lista.asp?id_comissao=8
e faça o download do arquivo Codbar3-v2005.zip.
Você vai encontrar na página 12 um passo a passo de como cálcular o dígito.
Mauro Costa Jr.
Re: Digito Verificador
11 de February de 2004 às 05:03PM
Valdeci, valeu pela dica!!

Acabei encarando o desafio e escrevi a funcao que faz o cálculo por conta própria. E ela até q ficou pequena... a lógica dela é que foi o problema...

Disponibilizei na área de scripts, mas tá dando uma mensagem de não encontrado. Acho q deve ser porque ele tem q ser moderado.

De qualquer, forma, aqui vai meu humilde fonte, já testado e funcionando:



<script language="php">
/* mod10()
* Calcula o DAC (Digito de Auto-Conferencia) com base no módulo 10.
* Por Mauro Costa Jr.
*
* Exemplo de uso: $digito = mod10("123456")
* A função retorna o DAC (de um dígito) da sequencia numérica que foi passada como parametro
*/

function mod10($string) {

// Consiste se a string recebida é valida, caso contrário retorna o dígito zero:
$string = trim($string);
if (empty($string) or !is_numeric($string))
return 0;

// Inicializa variaveis de trabalho
$posicao1 = strlen($string)-1; // Obtem a posicao do último digito da string
$multi = 2; // Declara o multiplicador com o valor de 2
$acumula = 0; // Zera a variavel que acumulará a soma dos digitos

// Loop principal de calculo
while ($posicao1 >= 0) { // Loop para multiplicar cada digito da string por 2 ou 1, da direita pra esquerda
$resultado = substr($string,$posicao1,1) * $multi;
$posicao2 = strlen($resultado)-1;
while ($posicao2 >= 0) { // Loop para acumular a soma dos digitos do resultado da multiplicação
$acumula = $acumula + substr($resultado,$posicao2,1);
$posicao2--;
};
if ($multi == 2) // Alterna o multiplicador entre 2 e 1
$multi = 1;
else
$multi = 2;
$posicao1--; // Controla a posição da string a ser processada
}

// Obtem o resto da divisão por dez:
$dac = bcmod($acumula, 10);

// Subtrai de 10 o resto obtido:
$dac = 10 - $dac;

// Se o resultado for dez, retorna zero:
if ($dac == 10) $dac = 0;

return $dac;

}

</script>
kellson
Re: Digito Verificador
14 de May de 2019 às 04:33AM
amigo não funcionou não, vc teria uma pagina já pronta pra mim dar uma olhada pois acho que é a forma de chamar este scrip que esta dando errado.
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.