GOVERNO DO ESTADO DE PERNAMBUCO
ROTEIRO DE CRÍTICA DA INSCRIÇÃO ESTADUAL

Dígito Verificador da Inscrição Estadual

O número de inscrição estadual no Cadastro de Contribuintes do Estado de Pernambuco - CACEPE possui 14 algarismos (dígitos), sendo 13 principais e 1 verificador. O cálculo do dígito verificador envolve o uso de "pesos" e da função "módulo" com parâmetro "11", conforme pode ser visto no exemplo abaixo:

Procedimentos de Cálculo (ex. para 18.1.001.0000004-9)

1. Multiplique cada algarismo principal pelo seu respectivo peso:
1   8   1   0   0   1   0   0   0   0   0   0   4   (algarismos)
x   x   x   x   x   x   x   x   x   x   x   x   x    
5   4   3   2   1   9   8   7   6   5   4   3   2   (pesos)
=   =   =   =   =   =   =   =   =   =   =   =   =    
5   32   3   0   0   9   0   0   0   0   0   0   8   (produtos)
2. Some os produtos obtidos para encontrar o total:
5 + 32 + 3 + 0 + 0 + 9 + 0 + 0 + 0 + 0 + 0 + 0 + 8 = 57   (total dos produtos)
3. Divida esse total pela constante "11" para obter o resto:
cacepe1.gif (1181 bytes)
4. Subtraia esse resto da constante "11" para encontrar o dígito verificador:
11 - 2 = 9
Quando essa diferença for maior que "9", subtraia "10" unidades para obter o valor do dígito verificador, uma vez que o mesmo deve ser sempre representado por apenas um algarismo.

Rotina de Verificação (exemplo em linguagem Pascal)
O parâmetro "ie" deve ser do tipo String com 14 posições.

Function teste_dv_cacepe (ie: String): Boolean;
     Var
a, b, c, d, e, f, g, h, i, j, k, l, m, n, total, dig: Integer;
     Begin
        
a := StrToInt(Copy(ie,14,1));
        
b := StrToInt(Copy(ie,13,1)) * 2;
         c := StrToInt(Copy(ie,12,1)) * 3;
        
d := StrToInt(Copy(ie,11,1)) * 4;
        
e := StrToInt(Copy(ie,10,1)) * 5;
        
f := StrToInt(Copy(ie,9,1)) * 6;
        
g := StrToInt(Copy(ie,8,1)) * 7;
        
h := StrToInt(Copy(ie,7,1)) * 8;
        
i := StrToInt(Copy(ie,6,1)) * 9;
        
j := StrToInt(Copy(ie,5,1)) * 1;
        
k := StrToInt(Copy(ie,4,1)) * 2;
        
l := StrToInt(Copy(ie,3,1)) * 3;
        
m := StrToInt(Copy(ie,2,1)) * 4;
        
n := StrToInt(Copy(ie,1,1)) * 5;
        
total := b + c + d + e + f + g + h + i + j + k + l + m + n;
        
dig := 11 - (total Mod 11);
         If
dig > 9 Then
             
dig := dig - 10;
         If
dig <> a Then
           
teste_dv_cacepe := False
         Else
           
teste_dv_cacepe := True;
    End;

Voltar