Por que cada estado tem uma regra de inscrição estadual
Cada estado tem a sua regra porque a inscrição estadual é um número do cadastro de contribuintes de cada Secretaria da Fazenda, e não existe um padrão nacional. Os tamanhos vão de 8 a 14 dígitos e as contas variam do módulo 11 ao módulo 9. Por isso, o sistema precisa guardar a UF junto da inscrição e validar com a regra daquele estado.
Cada estado tem a sua regra de inscrição estadual porque o número vem do cadastro de contribuintes de cada Secretaria da Fazenda. O ICMS é um imposto estadual, e cada Sefaz criou o formato do seu cadastro. Não há um padrão nacional que as 27 UFs sigam.
Para o desenvolvedor, o resultado é prático: a inscrição só pode ser validada junto da UF. Para gerar números de cada estado e conferir o dígito pela regra da UF, use o gerador de inscrição por estado. Este texto explica a lógica por trás das diferenças e o que fazer no código.
Onde estão as regras oficiais?
Em cada Sefaz, e reunidas pelo Sintegra na página de conferência de inscrições estaduais, com um roteiro de crítica por UF. Esses roteiros são a fonte usada aqui. A mesma página avisa que a rotina de validação que oferece pode ficar defasada para formatos novos e recomenda que quem valida inscrição busque as fórmulas nas próprias Sefaz.
Em termos práticos: se a regra do seu sistema e o roteiro de uma UF divergirem, vale o que a Sefaz publica.
Quanto as regras diferem?
Muito. Pelo gerador do site, os tamanhos se distribuem assim:
| Tamanho (dígitos) | UFs |
|---|---|
| 8 | RJ |
| 9 | AL, AM, AP, CE, ES, GO, MA, MS, PA, PB, PI, RR, SC, SE |
| 10 | PR, RS |
| 11 | MT |
| 13 | AC, DF, MG |
| Mais de um tamanho | BA (8 ou 9), PE (9 ou 14), RN (9 ou 10), RO (9 ou 14), SP (12, ou 13 com o P), TO (9 ou 11) |
Em dígitos verificadores, 20 UFs têm um só e 7 têm dois (AC, BA, DF, MG, PE, PR e SP). O tamanho de 9 dígitos é o mais comum, mas a conta dentro dele varia, como se vê a seguir.
Que diferenças pegam o desenvolvedor?
A mesma conta em vários estados. Os estados de 9 dígitos que usam a regra comum (módulo 11, pesos de 9 a 2) formam uma família. O número 672605740, gerado para o Piauí, passa na conta de sete UFs: AM, CE, ES, PB, PI, SC e SE. Se o seu sistema valida sem olhar a UF, ele aceita uma inscrição que o estado informado talvez nunca emita. Já o 247260577, gerado para Roraima, passa só na conta de Roraima, que usa outra regra.
O módulo muda. Roraima divide por 9, e não por 11. Os pesos são as posições de 1 a 8, e o dígito é o próprio resto. No roteiro, o exemplo 24006153-6 dá soma 105 e resto 6.
Dois módulos no mesmo número. Minas Gerais calcula o primeiro dígito por módulo 10 e o segundo por módulo 11. O roteiro manda inserir um zero depois do código do município (os três primeiros dígitos), multiplicar os dígitos alternadamente por 1 e 2 e somar os algarismos de cada produto, e não os produtos inteiros. O primeiro dígito é o que falta para a próxima dezena. O segundo é um módulo 11 comum, com pesos de 2 a 11.
A regra depende do próprio número. Na Bahia, o primeiro dígito (8 dígitos) ou o segundo (9 dígitos) decide se a conta é módulo 10 ou módulo 11. Quando esse dígito é 0, 1, 2, 3, 4, 5 ou 8, a conta é módulo 10; quando é 6, 7 ou 9, é módulo 11, segundo o roteiro.
O dígito não fica no fim. Em São Paulo, os dígitos verificadores ocupam a 9ª e a 12ª posições, e o produtor rural tem um formato próprio, com a letra P. A página da ferramenta resolve o exemplo paulista passo a passo.
Como fica a conta de Minas Gerais e de Roraima em código?
As duas funções abaixo foram executadas no Node com os exemplos dos roteiros: 062.307.904/0081 em Minas e 24006153-6 em Roraima.
// Minas Gerais: 11 dígitos de base (município + número + ordem) e 2 dígitos de controle
function dvsMG(base11) {
// D1: insere um 0 depois dos 3 primeiros dígitos, pesos 1 e 2 alternados,
// soma os ALGARISMOS dos produtos; D1 é o que falta para a próxima dezena
const comZero = base11.slice(0, 3) + '0' + base11.slice(3);
let algarismos = 0;
[...comZero].forEach((c, i) => {
const produto = Number(c) * (i % 2 === 0 ? 1 : 2);
algarismos += Math.floor(produto / 10) + (produto % 10);
});
const d1 = (10 - (algarismos % 10)) % 10;
// D2: módulo 11 sobre a base + D1, pesos 2 a 11 da direita para a esquerda
const doze = base11 + d1;
const soma = [...doze].reverse().reduce((t, c, i) => t + Number(c) * (2 + (i % 10)), 0);
const resto = soma % 11;
const d2 = resto < 2 ? 0 : 11 - resto;
return { algarismos, d1, soma, resto, d2 };
}
// Roraima: módulo 9, pesos 1 a 8 da esquerda para a direita
function dvRR(base8) {
const soma = [...base8].reduce((t, c, i) => t + Number(c) * (i + 1), 0);
return { soma, dv: soma % 9 };
}
console.log(dvsMG('06230790400'));
// { algarismos: 32, d1: 8, soma: 219, resto: 10, d2: 1 }
console.log(dvRR('24006153'));
// { soma: 105, dv: 6 }
O roteiro de Minas não diz o que fazer no primeiro dígito quando a soma já é uma dezena exata. A função acima devolve 0 nesse caso, que é o que o gerador do site faz. Se o seu cadastro depender desse caso, confirme com a Sefaz-MG.
O que o seu sistema deve fazer?
- Guardar a UF em coluna própria, ao lado da inscrição, e exigi-la na validação.
- Usar coluna de texto com pelo menos 14 caracteres. Rondônia e a inscrição antiga de Pernambuco têm 14 dígitos, e o produtor rural paulista tem uma letra.
- Preservar zeros à esquerda: vários estados têm inscrições que começam com zero.
- Tratar o caso de empresa sem inscrição. Muitos cadastros usam a palavra
ISENTO, e o seu sistema precisa decidir o que ela significa. - Validar mais do que a conta. Estados como Goiás, Maranhão e Pará exigem prefixos, e uma conta certa com prefixo errado não é emitida por esses estados.
Como testar sem usar inscrição de empresa real?
Gere números por UF e, para o teste negativo, gere também números com dígito errado, tamanho errado e inscrição de outro estado. Combine a inscrição com um CNPJ e com uma chave de acesso de NF-e da mesma UF para exercitar o cadastro de fornecedor e a entrada de nota.
A inscrição sorteada não existe em cadastro nenhum, e um número assim pode coincidir com o de uma empresa real. Por isso ele não identifica ninguém: serve só para testar software. A situação de uma empresa, se ativa ou não, só a Sefaz do estado informa.
Para começar, escolha a UF no gerador de inscrição estadual, gere a lista e baixe em CSV, JSON ou SQL.
Perguntas frequentes
Existe uma regra única de inscrição estadual para o Brasil?
Não. Cada Secretaria da Fazenda define o formato, os pesos e os dígitos verificadores da sua inscrição. O Sintegra reúne os roteiros de conferência de todas as UFs, e o próprio Sintegra recomenda buscar as fórmulas nas Sefaz.
Dá para validar inscrição estadual sem saber a UF?
Não com segurança. Um mesmo número de 9 dígitos pode passar na conta de vários estados ao mesmo tempo, e o sistema aceitaria uma inscrição que o estado informado jamais emitiria.
Que tipo de coluna usar para a inscrição estadual?
Texto, com pelo menos 14 caracteres, junto de uma coluna de UF. Há inscrições de 8 a 14 dígitos, algumas começam com zero e a de produtor rural de São Paulo tem a letra P no começo.
Fontes
Leia também
NIT, NIS, PIS e PASEP: qual a diferença e qual número usar
NIT é o número de inscrição do trabalhador na Previdência Social (INSS). Quem já tem PIS, PASEP ou NIS usa esse mesmo número como NIT e não ganha o…
14/11/2026 FiscalChave de acesso da NF-e em homologação, bloco a bloco
A chave de acesso da NF-e tem 44 posições e é igual em homologação e em produção: nada nela indica o ambiente, que vai no campo tpAmb da nota. Em h…
14/11/2026Veja também
Atualizado em 14/11/2026.