P.7. Cálculo dos dígitos de autocontrole (DAC) dos boletos em C #

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: