Na ficha de compensação de boleto, a representação numérica do código de barras é distribuída em cinco campos, sendo os três primeiros consistidos por DAC (Dígito de Autocontrole - Módulo 10) e, entre cada campo, espaço equivalente a uma posição; no quarto campo, indicado, isoladamente, o DAC (Módulo 11) do Código de Barras.
O código-fonte das funções, o arquivo Makefile,
e os comandos CREATE FUNCTION, que vinculam as funções
C às funções SQL, podem ser vistos
em Cálculo dos dígitos de autocontrole (DAC) dos boletos
no GitLab.
A seguir estão descritos os procedimento para cálculo dos DACs.
Cálculo do DAC do Código de Barras
Por definição da FEBRABAN e do Banco Central do Brasil, na 5ª posição do Código de Barras, deve ser indicado obrigatoriamente o “dígito verificador” (DAC), calculado através do módulo 11, conforme demonstrado a seguir:
Tomando-se os 43 algarismos que compõem o Código de Barras (sem considerar a 5ª posição), multiplique-os, iniciando-se da direita para a esquerda, pela sequência numérica de 2 a 9 (2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4... e assim por diante);
Some o resultado de cada produto efetuado e determine o total como (N);
Divida o total (N) por 11 e determine o resto obtido da divisão como Mod 11(N);
Calcule o dígito verificador (DAC) através da expressão: DAC = 11 - Mod 11(N)
OBS.: Se o resultado desta for igual a 0, 1, 10 ou 11, considere DAC = 1.
Esse resultado é o dígito verificador do código de barras, e deverá ser lançado para a 5ª posição.
O dígito 0 (zero) na quinta posição indica que o código de barras não possui dígito verificador.
Fonte: Itaú e Bradesco
Cálculo do DAC da Representação Numérica
A representação numérica do código de barras é composta por cinco campos: 1, 2, 3 4 e 5, sendo os três primeiros amarrados por DAC's, calculados pelo módulo 10, conforme mostrado abaixo:
Multiplica-se cada algarismo do campo pela sequência de multiplicadores 2, 1, 2, 1, 2, 1..., posicionados da direita para a esquerda;
Some individualmente, os algarismos dos resultados dos produtos, obtendo-se o total (N);
Divida o total encontrado (N) por 10, e determine o resto da divisão como MOD 10 (N);
Encontre o DAC através da seguinte expressão: DAC = 10 – Mod 10 (N)
OBS.: Se o resultado da etapa anterior for 10, considere o DAC = 0.
Nota: todo o resultado da multiplicação, cujo total for maior ou igual a 10 (dez), deverá ser efetuada a soma dos dois números.
Fonte: Itaú e Bradesco
Criação e teste das funções no PostgreSQL:
postgres=# -- DAC do Código de Barras
postgres=# CREATE FUNCTION daccb(text) RETURNS text
AS '$libdir/udf/boleto', 'daccb'
LANGUAGE C STRICT;
CREATE FUNCTION
postgres=# SELECT daccb('3419166700000123451101234567880057123457000');
daccb
-------
6
(1 linha)
postgres=# -- DAC da Representação Numérica
postgres=# CREATE FUNCTION dacrn(text) RETURNS text
AS '$libdir/udf/boleto', 'dacrn'
LANGUAGE C STRICT;
CREATE FUNCTION
postgres=# SELECT dacrn('341911012');
dacrn
-------
1
(1 linha)
postgres=# SELECT dacrn('3456788005');
dacrn
-------
8
(1 linha)
Referências:
Banco Bradesco - Manual de Procedimentos Operacionais para Troca de Arquivos 240 Posições - Versão em Português.
Banco Itaú - Cobrança Bancária - Intercâmbio Eletrônico de Arquivos - Layout de Arquivos – FEBRABAN 240.
FEBRABAN - Intercâmbio de Informações entre Bancos e Empresas - Padrão FEBRABAN 240 Posições.