Validar Inscrição Estadual no Excel
É comum as empresas terem problemas na hora da validação da inscrição estadual. Neste artigo mostramos como fazer isso no Excel. Veja também Como consultar o Sintegra Automaticamente.
A inconsistência da inscrição estadual dados gera problemas na entrega do Sintegra, e por conseguinte você terá muito retrabalho para corrigir estas informações, regerar e reenviar o arquivo.
Para realizar estes cálculos você pode verificar nesta página: http://www.sintegra.gov.br/insc_est.html o cálculo de todas as Inscrições Estaduais.
Neste artigo você terá o código fonte liberado e a implementação da validação da Inscrição Estadual através de uma UDF, função própria global no Excel feita em VBA.
O que é Inscrição Estadual e como Validar Inscrição Estadual
No Brasil, cada estado tem um formato único para o número de registro estadual, também conhecido como “Inscrição Estadual”. Este número é usado para identificar uma empresa ou indivíduo para fins tributários e é obrigatório para empresas que operam dentro do estado.
Para validar uma Inscrição Estadual, é necessário verificar se o número segue o formato correto para o estado em que a empresa ou indivíduo está registrado. O formato do número pode variar dependendo do estado, com alguns estados tendo um formato numérico simples enquanto outros têm formatos alfanuméricos que incluem letras e caracteres especiais.
Uma maneira de validar a Inscrição Estadual é usar uma expressão regular, que é uma sequência de caracteres que define um padrão de busca. Cada estado tem um padrão específico que pode ser usado para combinar a Inscrição Estadual, e você pode usar este padrão para garantir que o número esteja no formato correto.
Outra maneira é usar uma biblioteca de validação que já tenha uma validação pré-construída para cada estado, essas bibliotecas podem ser encontradas em diferentes linguagens, como Java, Python e PHP, e dessa forma você não precisa se preocupar com o padrão específico para cada estado.
É importante lembrar que a validação da Inscrição Estadual não se trata apenas do formato, mas também das regras fiscais do estado, alguns estados usam um dígito ou um algoritmo de módulo para validar o número e para isso é necessário verificar as regras fiscais do estado ou consultar um software especializado.
Também é importante mencionar que alguns estados possuem mais de um formato, dependendo do tipo da empresa ou do período de registro. Então, sempre é recomendável verificar o formato e as regras com o Departamento Fiscal do estado ou consultar um software especializado.
Em resumo, para validar a Inscrição Estadual no Brasil, é necessário verificar se o número segue o formato correto para o estado em que a empresa ou indivíduo está registrado, é possível usar uma expressão regular ou uma biblioteca de validação e também verificar as regras fiscais do estado ou consultar um software
Como implementar a função de validação de inscrição estadual no Excel
Para instalar a função pressione as teclas ALT + F11, depois clique em Inserir->Módulo
No módulo criado cole o código VBA:
Function ChecaInscrE(ByVal pUF As String, ByVal pInscr As String)
Dim strBase As String
Dim strBase2 As String
Dim strOrigem As String
Dim strDigito1 As String
Dim strDigito2 As String
Dim intPos As Long
Dim intValor As Long
Dim intSoma As Long
Dim intResto As Long
Dim intNumero As Long
Dim intPeso As Long
Dim intDig As Long
ChecaInscrE = False
strBase = ""
strBase2 = ""
strOrigem = ""
If Trim(pInscr) = "ISENTO" Or Trim(pInscr) = "EX" Then
ChecaInscrE = True
Exit Function
End If
For intPos = 1 To Len(Trim(pInscr))
If InStr(1, "0123456789P", Mid(pInscr, intPos, 1), vbTextCompare) > 0 Then
strOrigem = strOrigem & Mid(pInscr, intPos, 1)
End If
Next
Select Case pUF
Case "AC" 'Acre
strBase = Left(Trim(strOrigem) & "000000000", 13)
d01 = CInt(Mid(strBase, 1, 1))
d02 = CInt(Mid(strBase, 2, 1))
d03 = CInt(Mid(strBase, 3, 1))
d04 = CInt(Mid(strBase, 4, 1))
d05 = CInt(Mid(strBase, 5, 1))
d06 = CInt(Mid(strBase, 6, 1))
d07 = CInt(Mid(strBase, 7, 1))
d08 = CInt(Mid(strBase, 8, 1))
d09 = CInt(Mid(strBase, 9, 1))
d10 = CInt(Mid(strBase, 10, 1))
d11 = CInt(Mid(strBase, 11, 1))
dv01 = CInt(Mid(strBase, 12, 1))
dv02 = CInt(Mid(strBase, 13, 1))
If d01 <> 0 Or d02 <> 1 Then
ChecaInscrE = False
Exit Function
End If
ds = 4 * d01 + 3 * d02 + 2 * d03 + 9 * d04 + 8 * d05 + 7 * d06 + 6 * d07 + 5 * d08 + _
4 * d09 + 3 * d10 + 2 * d11
aux1 = Fix(ds / 11)
aux1 = aux1 * 11
aux2 = ds - aux1 ' aux2 é o resto, ou mod
digverificador1 = 11 - aux2
If digverificador1 = 10 Or digverificador1 = 11 Then
digverificador1 = 0 'primeiro digito
End If
ds = 5 * d01 + 4 * d02 + 3 * d03 + 2 * d04 + 9 * d05 + 8 * d06 + 7 * d07 + 6 * d08 + _
5 * d09 + 4 * d10 + 3 * d11 + 2 * digverificador1
aux1 = Fix(ds / 11)
aux1 = aux1 * 11
aux2 = ds - aux1 ' aux2 é o resto, ou mod
digverificador2 = 11 - aux2
If digverificador2 = 10 Or digverificador2 = 11 Then
digverificador2 = 0 'primeiro digito
End If
If digverificador1 = dv01 And digverificador2 = dv02 Then
ChecaInscrE = True
End If
Case "AL" ' Alagoas
strBase = Left(Trim(strOrigem) & "000000000", 9)
If Left(strBase, 2) = "24" Then
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intSoma = intSoma * 10
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto = 10, "0", CStr(intResto)), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case "AM" ' Amazonas
strBase = Left(Trim(strOrigem) & "000000000", 9)
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
If intSoma < 11 Then
strDigito1 = Right(CStr(11 - intSoma), 1)
Else
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
End If
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "AP" ' Amapa
strBase = Left(Trim(strOrigem) & "000000000", 9)
intPeso = 0
intDig = 0
If Left(strBase, 2) = "03" Then
intNumero = Fix(Left(strBase, 8))
If intNumero >= 3000001 And intNumero <= 3017000 Then
intPeso = 5
intDig = 0
ElseIf intNumero >= 3017001 And intNumero <= 3019022 Then
intPeso = 9
intDig = 1
ElseIf intNumero >= 3019023 Then
intPeso = 0
intDig = 0
End If
intSoma = intPeso
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
intValor = 11 - intResto
If intValor = 10 Then
intValor = 0
ElseIf intValor = 11 Then
intValor = intDig
End If
strDigito1 = Right(CStr(intValor), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case "BA" ' Bahia
strBase = Left(Trim(strOrigem) & "00000000", 8)
If InStr(1, "0123458", Left(strBase, 1), vbTextCompare) > 0 Then
intSoma = 0
For intPos = 1 To 6
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (8 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 10
strDigito2 = Right(IIf(intResto = 0, "0", CStr(10 - intResto)), 1)
strBase2 = Left(strBase, 6) & strDigito2
intSoma = 0
For intPos = 1 To 7
intValor = CInt(Mid(strBase2, intPos, 1))
intValor = intValor * (9 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 10
strDigito1 = Right(IIf(intResto = 0, "0", CStr(10 - intResto)), 1)
Else
intSoma = 0
For intPos = 1 To 6
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (8 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito2 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 6) & strDigito2
intSoma = 0
For intPos = 1 To 7
intValor = CInt(Mid(strBase2, intPos, 1))
intValor = intValor * (9 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
End If
strBase2 = Left(strBase, 6) & strDigito1 & strDigito2
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "CE" ' Ceara
strBase = Left(Trim(strOrigem) & "000000000", 9)
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
intValor = 11 - intResto
If intValor > 9 Then
intValor = 0
End If
strDigito1 = Right(CStr(intValor), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "DF" ' Distrito Federal
strBase = Left(Trim(strOrigem) & "0000000000000", 13)
If Left(strBase, 2) = "07" Then
intSoma = 0
intPeso = 2
For intPos = 11 To 1 Step -1
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 9 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 11) & strDigito1
intSoma = 0
intPeso = 2
For intPos = 12 To 1 Step -1
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 9 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito2 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 12) & strDigito2
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case "ES" ' Espirito Santo
strBase = Left(Trim(strOrigem) & "000000000", 9)
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "GO" ' Goias
strBase = Left(Trim(strOrigem) & "000000000", 9)
If InStr(1, "10,11,15", Left(strBase, 2), vbTextCompare) > 0 Then
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
If intResto = 0 Then
strDigito1 = "0"
ElseIf intResto = 1 Then
intNumero = CInt(Left(strBase, 8))
strDigito1 = Right(IIf(intNumero >= 10103105 And intNumero <= 10119997, "1", "0"), 1)
Else
strDigito1 = Right(CStr(11 - intResto), 1)
End If
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case "MA" ' Maranhão
strBase = Left(Trim(strOrigem) & "000000000", 9)
If Left(strBase, 2) = "12" Then
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case "MT" ' Mato Grosso
While Len(strOrigem) < 11
strOrigem = "0" & strOrigem
Wend
strBase = Left(Trim(strOrigem) & "000000000", 11)
d01 = CInt(Mid(strBase, 1, 1))
d02 = CInt(Mid(strBase, 2, 1))
d03 = CInt(Mid(strBase, 3, 1))
d04 = CInt(Mid(strBase, 4, 1))
d05 = CInt(Mid(strBase, 5, 1))
d06 = CInt(Mid(strBase, 6, 1))
d07 = CInt(Mid(strBase, 7, 1))
d08 = CInt(Mid(strBase, 8, 1))
d09 = CInt(Mid(strBase, 9, 1))
d10 = CInt(Mid(strBase, 10, 1))
dfinal = CInt(Mid(strBase, 11, 1))
ds = 3 * d01 + 2 * d02 + 9 * d03 + 8 * d04 + 7 * d05 + 6 * d06 + 5 * d07 + 4 * d08 + _
3 * d09 + 2 * d10
aux1 = Fix(ds / 11)
aux1 = aux1 * 11
aux2 = ds - aux1
If aux2 = 0 Or aux2 = 1 Then
digVerificador = 0
Else
digVerificador = 11 - aux2
End If
If dfinal = digVerificador Then
ChecaInscrE = True
End If
Case "MS" ' Mato Grosso do Sul
strBase = Left(Trim(strOrigem) & "000000000", 9)
If Left(strBase, 2) = "28" Then
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case "MG" ' Minas Gerais
strBase = Left(Trim(strOrigem) & "0000000000000", 13)
strBase2 = Left(strBase, 3) & "0" & Mid(strBase, 4, 8)
intNumero = 2
For intPos = 1 To 12
intValor = CInt(Mid(strBase2, intPos, 1))
intNumero = IIf(intNumero = 2, 1, 2)
intValor = intValor * intNumero
If intValor > 9 Then
strDigito1 = FormatNumber(intValor, "00")
intValor = CInt(Left(strDigito1, 1)) + CInt(Right(strDigito1, 1))
End If
intSoma = intSoma + intValor
Next
intValor = intSoma
While Right(FormatNumber(intValor, "000"), 1) <> "0"
intValor = intValor + 1
Wend
strDigito1 = Right(FormatNumber(intValor - intSoma, "00"), 1)
strBase2 = Left(strBase, 11) & strDigito1
intSoma = 0
intPeso = 2
For intPos = 12 To 1 Step -1
intValor = CInt(Mid(strBase2, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 11 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito2 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = strBase2 & strDigito2
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "PA" ' Para
strBase = Left(Trim(strOrigem) & "000000000", 9)
If Left(strBase, 2) = "15" Then
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case "PB" ' Paraiba
strBase = Left(Trim(strOrigem) & "000000000", 9)
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
intValor = 11 - intResto
If intValor > 9 Then
intValor = 0
End If
strDigito1 = Right(CStr(intValor), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "PE" ' Pernambuco
strBase = Left(Trim(strOrigem) & "000000000", 9)
intSoma = 0
intPeso = 2
For intPos = 7 To 1 Step -1
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
Next
intResto = intSoma Mod 11
If intResto = 0 Or intResto = 1 Then
strDigito1 = 0
Else
strDigito1 = 11 - intResto
End If
intSoma = 0
intPeso = 2
For intPos = 8 To 1 Step -1
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
Next
intResto = intSoma Mod 11
If intResto = 0 Or intResto = 1 Then
strDigito2 = 0
Else
strDigito2 = 11 - intResto
End If
strBase2 = Left(strBase, 7) & strDigito1 & strDigito2
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "PI" ' Piaui
strBase = Left(Trim(strOrigem) & "000000000", 9)
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "PR" ' Parana
strBase = Left(Trim(strOrigem) & "0000000000", 10)
intSoma = 0
intPeso = 2
For intPos = 8 To 1 Step -1
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 7 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 8) & strDigito1
intSoma = 0
intPeso = 2
For intPos = 9 To 1 Step -1
intValor = CInt(Mid(strBase2, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 7 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito2 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = strBase2 & strDigito2
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "RJ" ' Rio de Janeiro
strBase = Left(Trim(strOrigem) & "00000000", 8)
intSoma = 0
intPeso = 2
For intPos = 7 To 1 Step -1
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 7 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 7) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "RN" ' Rio Grande do Norte
strBase = Left(Trim(strOrigem) & "000000000", 9)
If Left(strBase, 2) = "20" Then
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intSoma = intSoma * 10
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto > 9, "0", CStr(intResto)), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case "RO" ' Rondonia
strBase = Left(Trim(strOrigem) & "000000000", 14)
d01 = CInt(Mid(strBase, 1, 1))
d02 = CInt(Mid(strBase, 2, 1))
d03 = CInt(Mid(strBase, 3, 1))
d04 = CInt(Mid(strBase, 4, 1))
d05 = CInt(Mid(strBase, 5, 1))
d06 = CInt(Mid(strBase, 6, 1))
d07 = CInt(Mid(strBase, 7, 1))
d08 = CInt(Mid(strBase, 8, 1))
d09 = CInt(Mid(strBase, 9, 1))
d10 = CInt(Mid(strBase, 10, 1))
d11 = CInt(Mid(strBase, 11, 1))
d12 = CInt(Mid(strBase, 12, 1))
d13 = CInt(Mid(strBase, 13, 1))
dfinal = CInt(Mid(strBase, 14, 1))
ds = 6 * d01 + 5 * d02 + 4 * d03 + 3 * d04 + 2 * d05 + 9 * d06 + 8 * d07 + 7 * d08 + _
6 * d09 + 5 * d10 + 4 * d11 + 3 * d12 + 2 * d13
aux1 = Fix(ds / 11)
aux1 = aux1 * 11
aux2 = ds - aux1
digVerificador = 11 - aux2
If digVerificador > 9 Then
resto_do_calculo = digVerificador - 10
Else
resto_do_calculo = digVerificador
End If
If dfinal <> resto_do_calculo Then
ChecaInscrE = False
Else
ChecaInscrE = True
End If
Case "RR" ' Roraima
strBase = Left(Trim(strOrigem) & "000000000", 9)
If Left(strBase, 2) = "24" Then
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * intPos
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 9
strDigito1 = Right(CStr(intResto), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case "RS" ' Rio Grande do Sul
strBase = Left(Trim(strOrigem) & "0000000000", 10)
intNumero = CInt(Left(strBase, 3))
If intNumero > 0 And intNumero < 468 Then
intSoma = 0
intPeso = 2
For intPos = 9 To 1 Step -1
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 9 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
intValor = 11 - intResto
If intValor > 9 Then
intValor = 0
End If
strDigito1 = Right(CStr(intValor), 1)
strBase2 = Left(strBase, 9) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
Case "SC" ' Santa Catarina
strBase = Left(Trim(strOrigem) & "000000000", 9)
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "SE" ' Sergipe
strBase = Left(Trim(strOrigem) & "000000000", 9)
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
intValor = 11 - intResto
If intValor > 9 Then
intValor = 0
End If
strDigito1 = Right(CStr(intValor), 1)
strBase2 = Left(strBase, 8) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "SP" ' São Paulo
If Left(strOrigem, 1) = "P" Then
strBase = Left(Trim(strOrigem) & "0000000000000", 13)
strBase2 = Mid(strBase, 2, 8)
intSoma = 0
intPeso = 1
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso = 2 Then
intPeso = 3
End If
If intPeso = 9 Then
intPeso = 10
End If
Next
intResto = intSoma Mod 11
strDigito1 = Right(CStr(intResto), 1)
strBase2 = Left(strBase, 8) & strDigito1 & Mid(strBase, 11, 3)
Else
strBase = Left(Trim(strOrigem) & "000000000000", 12)
intSoma = 0
intPeso = 1
For intPos = 1 To 8
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso = 2 Then
intPeso = 3
End If
If intPeso = 9 Then
intPeso = 10
End If
Next
intResto = intSoma Mod 11
strDigito1 = Right(CStr(intResto), 1)
strBase2 = Left(strBase, 8) & strDigito1 & Mid(strBase, 10, 2)
intSoma = 0
intPeso = 2
For intPos = 11 To 1 Step -1
intValor = CInt(Mid(strBase, intPos, 1))
intValor = intValor * intPeso
intSoma = intSoma + intValor
intPeso = intPeso + 1
If intPeso > 10 Then
intPeso = 2
End If
Next
intResto = intSoma Mod 11
strDigito2 = Right(CStr(intResto), 1)
strBase2 = strBase2 & strDigito2
End If
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
Case "TO" ' Tocantins
strBase = Left(Trim(strOrigem) & "00000000000", 11)
If InStr(1, "01,02,03,99", Mid(strBase, 3, 2), vbTextCompare) > 0 Then
strBase2 = Left(strBase, 2) & Mid(strBase, 5, 6)
intSoma = 0
For intPos = 1 To 8
intValor = CInt(Mid(strBase2, intPos, 1))
intValor = intValor * (10 - intPos)
intSoma = intSoma + intValor
Next
intResto = intSoma Mod 11
strDigito1 = Right(IIf(intResto < 2, "0", CStr(11 - intResto)), 1)
strBase2 = Left(strBase, 10) & strDigito1
If strBase2 = strOrigem Then
ChecaInscrE = True
End If
End If
End Select
End Function
Sub lsShowFrmIE()
frmValidaIE.Show
End Sub
Para usar a função clique em qualquer lugar na sua planilha do Excel e digite ChecaInscrE, e passe o número da inscrição estadual, conforme abaixo:
Você também pode implementar a função para que fique disponível sempre que abrir o Excel, criando assim um suplemento no Excel, veja neste artigo: https://www.guiadoexcel.com.br/como-criar-funcoes-proprias-no-excel-com-vba/
Clicando no botão “Exemplo de formulário” você tem também um exemplo do uso da função de validação de inscrição estadual em um formulário VBA, basta escolher a UF e digitar a Inscrição estadual para que seja retornado se o mesmo é válido.
Para testar inscrições estaduais você também pode usar este site: https://www.4devs.com.br/gerador_de_inscricao_estadual
O código fonte utilizado para a validação das inscrições estaduais foi traduzido para VBA, atualizado no caso do estado de Pernambuco e feita a indentação, baseado no fonte de: https://www.codigofonte.com.br/codigos/validar-inscricao-estadual-para-qualquer-estado
Para baixar a planilha exemplo com o código implementado gratuitamente clique no botão abaixo.
Baixe a planilhaAbraço
Marcos Rieper