Hey guys,
Goodnight!

In this post, I will once again bring a function to validate state registration for all states in Brazil, as I had already demonstrated in my post How to validate state registration using T-SQL function in SQL Server, but this time, I bring you the function written in C#, to be used in your CLR projects in the SQL Server database or even in C# development projects, without having anything to do with the CLR or SQL Server and without the need to import external libraries.

Validation of state registration is very important for those who issue invoices, for financial institutions, banks and commerce in general and this information must be valid and complete, as per Sefaz and Sintegra regulations.

I thought it would be cool to share this C# solution in the CLR, because its performance is much better than the T-SQL function and the code can be more organized and easier to understand.

Examples of using the function

-- Validando inscrição estadual da Bahia
SELECT 
    CLR.dbo.fncValida_Inscricao_Estadual('BA', '055540903'),
    CLR.dbo.fncValida_Inscricao_Estadual('BA', '045540903')
 
-- Validando inscrição estadual do Espírito Santo
SELECT 
    CLR.dbo.fncValida_Inscricao_Estadual('ES', '355206196'),
    CLR.dbo.fncValida_Inscricao_Estadual('ES', '355206197')
 
-- Validando inscrição estadual de São Paulo
SELECT 
    CLR.dbo.fncValida_Inscricao_Estadual('SP', '556261170177'),
    CLR.dbo.fncValida_Inscricao_Estadual('SP', '56261170177')
Results:

SQL Server - CLR validar inscrição estadual csharp .net
SQL Server - CLR validate state registration csharp .net

Validation function source code

Now that I've shown how easy it is to validate state registration for any state in Brazil, I'll demonstrate the source code, written in C#, ready to copy and paste into your CLR project and use from queries in SQL Server:

View function source code
using System;
using System.Data.SqlTypes;

public partial class UserDefinedFunctions
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static SqlBoolean fncValida_Inscricao_Estadual(SqlString Ds_UF, SqlString Ds_Inscricao_Estadual)
    {

        if (Ds_UF.IsNull || Ds_Inscricao_Estadual.IsNull)
            return false;

        if (Ds_UF.Value.Length != 2)
            return false;

        if (Ds_Inscricao_Estadual.Value.Length == 0)
            return false;

        var pUF = Ds_UF.Value;
        var strOrigem = Ds_Inscricao_Estadual.Value.Trim().Replace(".", "").Replace("-", "").Replace("/", "");

        if ((strOrigem.Trim().ToUpper() == "ISENTO"))
            return true;


        try
        {

            switch (pUF.ToUpper())
            {

                case "AC":
                    return fncValida_Inscricao_Estadual_AC(strOrigem);

                case "AL":
                    return fncValida_Inscricao_Estadual_AL(strOrigem);

                case "AM":
                    return fncValida_Inscricao_Estadual_AM(strOrigem);

                case "AP":
                    return fncValida_Inscricao_Estadual_AP(strOrigem);

                case "BA":
                    return fncValida_Inscricao_Estadual_BA(strOrigem);

                case "CE":
                    return fncValida_Inscricao_Estadual_CE(strOrigem);

                case "DF":
                    return fncValida_Inscricao_Estadual_DF(strOrigem);

                case "ES":
                    return fncValida_Inscricao_Estadual_ES(strOrigem);

                case "GO":
                    return fncValida_Inscricao_Estadual_GO(strOrigem);

                case "MA":
                    return fncValida_Inscricao_Estadual_MA(strOrigem);

                case "MT":
                    return fncValida_Inscricao_Estadual_MT(strOrigem);

                case "MS":
                    return fncValida_Inscricao_Estadual_MS(strOrigem);

                case "MG":
                    return fncValida_Inscricao_Estadual_MG(strOrigem);

                case "PA":
                    return fncValida_Inscricao_Estadual_PA(strOrigem);

                case "PB":
                    return fncValida_Inscricao_Estadual_PB(strOrigem);

                case "PE":
                    return fncValida_Inscricao_Estadual_PE(strOrigem);

                case "PI":
                    return fncValida_Inscricao_Estadual_PI(strOrigem);

                case "PR":
                    return fncValida_Inscricao_Estadual_PR(strOrigem);

                case "RJ":
                    return fncValida_Inscricao_Estadual_RJ(strOrigem);

                case "RN":
                    return fncValida_Inscricao_Estadual_RN(strOrigem);

                case "RO":
                    return fncValida_Inscricao_Estadual_RO(strOrigem);

                case "RR":
                    return fncValida_Inscricao_Estadual_RR(strOrigem);

                case "RS":
                    return fncValida_Inscricao_Estadual_RS(strOrigem);

                case "SC":
                    return fncValida_Inscricao_Estadual_SC(strOrigem);

                case "SE":
                    return fncValida_Inscricao_Estadual_SE(strOrigem);

                case "SP":
                    return fncValida_Inscricao_Estadual_SP(strOrigem);

                case "TO":
                    return fncValida_Inscricao_Estadual_TO(strOrigem);

                default:
                    return false;

            }

        }
        catch (Exception e)
        {
            return false;
        }

    }



    private static bool fncValida_Inscricao_Estadual_AC(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 13 || strOrigem.Substring(0, 2) != "01")
            return false;

        var strBase = strOrigem.Trim();

        if (strBase.Substring(0, 2) != "01") return false;

        var intSoma = 0;
        var intPeso = 4;
        var intValor = 0;

        for (var intPos = 1; (intPos <= 11); intPos++)
        {

            intValor = int.Parse(strBase.Substring((intPos - 1), 1));

            if (intPeso == 1) intPeso = 9;

            intSoma += intValor * intPeso;

            intPeso--;
        }

        var intResto = (intSoma % 11);

        intSoma = 0;
        strBase = (strOrigem.Trim() + "000000000000").Substring(0, 12);
        intPeso = 5;

        for (var intPos = 1; (intPos <= 12); intPos++)
        {
            intValor = int.Parse(strBase.Substring((intPos - 1), 1));

            if (intPeso == 1) intPeso = 9;

            intSoma += intValor * intPeso;
            intPeso--;
        }

        intResto = (intSoma % 11);
        var strDigito2 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));

        var strBase2 = (strBase.Substring(0, 12) + strDigito2);

        return (strBase2 == strOrigem);
    }

    private static bool fncValida_Inscricao_Estadual_AL(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9 || strOrigem.Substring(0, 2) != "24")
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);

        if ((strBase.Substring(0, 2) != "24")) return false;

        var intSoma = 0;
        var intPeso = 9;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {

            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));

            intSoma += intValor * intPeso;
            intPeso--;
        }

        intSoma = (intSoma * 10);
        var intResto = (intSoma % 11);

        var strDigito1 = ((intResto == 10) ? "0" : Convert.ToString(intResto)).Substring((((intResto == 10) ? "0" : Convert.ToString(intResto)).Length - 1));

        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;
    }

    private static bool fncValida_Inscricao_Estadual_AM(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9)
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intSoma = 0;
        var intPeso = 9;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));

            intSoma += intValor * intPeso;
            intPeso--;
        }

        var intResto = (intSoma % 11);
        var strDigito1 = intSoma < 11 ? (11 - intSoma).ToString() : ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return (strBase2 == strOrigem);

    }

    private static bool fncValida_Inscricao_Estadual_AP(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9)
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intPeso = 9;

        if (strBase.Substring(0, 2) != "03") return false;

        strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intSoma = 0;

        int intValor;
        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            intValor = int.Parse(strBase.Substring((intPos - 1), 1));

            intSoma += intValor * intPeso;
            intPeso--;
        }

        var intResto = (intSoma % 11);
        intValor = (11 - intResto);

        var strDigito1 = Convert.ToString(intValor).Substring((Convert.ToString(intValor).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;
    }

    private static bool fncValida_Inscricao_Estadual_BA(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;

        if (strOrigem.Length != 9 && strOrigem.Length != 8)
            return false;

        var strBase = "";

        switch (strOrigem.Length)
        {
            case 8:
                strBase = (strOrigem.Trim() + "00000000").Substring(0, 8);
                break;
            case 9:
                strBase = (strOrigem.Trim() + "00000000").Substring(0, 9);
                break;
        }

        var intSoma = 0;
        int intValor;
        var intPeso = 0;
        int intResto;
        var strDigito1 = "";
        var strDigito2 = "";
        var strBase2 = "";


        #region Validação 8 dígitos
        if (strBase.Length == 8)
        {

            if ((("0123458".IndexOf(strBase.Substring(0, 1), 0, StringComparison.OrdinalIgnoreCase) + 1) > 0))
            {

                for (var intPos = 1; (intPos <= 6); intPos++)
                {
                    intValor = int.Parse(strBase.Substring((intPos - 1), 1));

                    if (intPos == 1) intPeso = 7;

                    intSoma += intValor * intPeso;
                    intPeso--;
                }


                intResto = (intSoma % 10);
                strDigito2 = ((intResto == 0) ? "0" : Convert.ToString((10 - intResto))).Substring((((intResto == 0) ? "0" : Convert.ToString((10 - intResto))).Length - 1));


                strBase2 = strBase.Substring(0, 7) + strDigito2;

                if (strBase2 == strOrigem)
                {

                    intSoma = 0;
                    intPeso = 0;

                    for (var intPos = 1; (intPos <= 7); intPos++)
                    {
                        intValor = int.Parse(strBase.Substring((intPos - 1), 1));

                        if (intPos == 7)
                            intValor = int.Parse(strBase.Substring((intPos), 1));

                        if (intPos == 1) intPeso = 8;

                        intSoma += intValor * intPeso;
                        intPeso--;
                    }


                    intResto = (intSoma % 10);
                    strDigito1 = ((intResto == 0) ? "0" : Convert.ToString((10 - intResto))).Substring((((intResto == 0) ? "0" : Convert.ToString((10 - intResto))).Length - 1));

                    strBase2 = (strBase.Substring(0, 6) + strDigito1 + strDigito2);

                    return strBase2 == strOrigem;

                }

                return false;


            }


            if ((("679".IndexOf(strBase.Substring(0, 1), 0, StringComparison.OrdinalIgnoreCase) + 1) > 0))
            {

                intSoma = 0;

                for (var intPos = 1; (intPos <= 6); intPos++)
                {
                    intValor = int.Parse(strBase.Substring((intPos - 1), 1));

                    if (intPos == 1) intPeso = 7;

                    intSoma += intValor * intPeso;
                    intPeso--;
                }


                intResto = (intSoma % 11);
                strDigito2 = ((intResto == 0) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto == 0) ? "0" : Convert.ToString((11 - intResto))).Length - 1));


                strBase2 = strBase.Substring(0, 7) + strDigito2;

                if (strBase2 == strOrigem)
                {

                    intSoma = 0;
                    intPeso = 0;

                    for (var intPos = 1; (intPos <= 7); intPos++)
                    {
                        intValor = int.Parse(strBase.Substring((intPos - 1), 1));

                        if (intPos == 7)
                            intValor = int.Parse(strBase.Substring((intPos), 1));

                        if (intPos == 1) intPeso = 8;

                        intSoma += intValor * intPeso;
                        intPeso--;
                    }


                    intResto = (intSoma % 11);
                    strDigito1 = ((intResto == 0) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto == 0) ? "0" : Convert.ToString((11 - intResto))).Length - 1));

                    strBase2 = (strBase.Substring(0, 6) + strDigito1 + strDigito2);

                    return strBase2 == strOrigem;

                }

                return false;

            }

        }
        #endregion


        #region Validação 9 dígitos
        if (strBase.Length == 9)
        {

            var modulo = (("0123458".IndexOf(strBase.Substring(1, 1), 0, StringComparison.OrdinalIgnoreCase) + 1) > 0) ? 10 : 11;


            intSoma = 0;


            for (var intPos = 1; (intPos <= 7); intPos++)
            {
                intValor = int.Parse(strBase.Substring((intPos - 1), 1));

                if (intPos == 1) intPeso = 8;

                intSoma += intValor * intPeso;
                intPeso--;
            }

            intResto = (intSoma % modulo);

            if (modulo == 11)
                strDigito2 = ((intResto == 0 || intResto == 1) ? "0" : Convert.ToString((modulo - intResto))).Substring((((intResto == 0 || intResto == 1) ? "0" : Convert.ToString((modulo - intResto))).Length - 1));
            else
                strDigito2 = ((intResto == 0) ? "0" : Convert.ToString((modulo - intResto))).Substring((((intResto == 0) ? "0" : Convert.ToString((modulo - intResto))).Length - 1));


            strBase2 = strBase.Substring(0, 8) + strDigito2;

            if (strBase2 == strOrigem)
            {

                intSoma = 0;
                intPeso = 0;

                for (var intPos = 1; (intPos <= 8); intPos++)
                {
                    intValor = int.Parse(strBase.Substring((intPos - 1), 1));

                    if (intPos == 8)
                        intValor = int.Parse(strBase.Substring((intPos), 1));

                    if (intPos == 1) intPeso = 9;

                    intSoma += intValor * intPeso;
                    intPeso--;
                }


                intResto = (intSoma % modulo);

                if (modulo == 11)
                    strDigito1 = ((intResto == 0 || intResto == 1) ? "0" : Convert.ToString((modulo - intResto))).Substring((((intResto == 0 || intResto == 1) ? "0" : Convert.ToString((modulo - intResto))).Length - 1));
                else
                    strDigito1 = ((intResto == 0) ? "0" : Convert.ToString((modulo - intResto))).Substring((((intResto == 0) ? "0" : Convert.ToString((modulo - intResto))).Length - 1));


                strBase2 = (strBase.Substring(0, 7) + strDigito1 + strDigito2);

                return strBase2 == strOrigem;

            }

            return false;


        }
        #endregion

        return false;

    }


    private static bool fncValida_Inscricao_Estadual_CE(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length > 9)
            return false;

        while (strOrigem.Length <= 8)
            strOrigem = "0" + strOrigem;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intSoma = 0;
        var intValor = 0;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * (10 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);
        intValor = (11 - intResto);

        if ((intValor > 9))
            intValor = 0;

        var strDigito1 = Convert.ToString(intValor).Substring((Convert.ToString(intValor).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_DF(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 13 || strOrigem.Substring(0, 3) != "073")
            return false;

        var strBase = (strOrigem.Trim() + "0000000000000").Substring(0, 13);

        var intSoma = 0;
        var intPeso = 2;
        var intValor = 0;

        for (var intPos = 11; (intPos >= 1); intPos = (intPos + -1))
        {
            intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * intPeso);
            intSoma = (intSoma + intValor);
            intPeso = (intPeso + 1);

            if ((intPeso > 9))
                intPeso = 2;
        }

        var intResto = (intSoma % 11);
        var strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        var strBase2 = (strBase.Substring(0, 11) + strDigito1);

        intSoma = 0;
        intPeso = 2;

        for (var intPos = 12; (intPos >= 1); intPos = (intPos + -1))
        {
            intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * intPeso);
            intSoma = (intSoma + intValor);
            intPeso = (intPeso + 1);

            if ((intPeso > 9))
                intPeso = 2;
        }

        intResto = (intSoma % 11);
        var strDigito2 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        strBase2 = (strBase.Substring(0, 12) + strDigito2);

        return strBase2 == strOrigem;
    }

    private static bool fncValida_Inscricao_Estadual_ES(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9)
            return false;

        var strBase = strOrigem.Trim();
        var intSoma = 0;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * (10 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);
        var strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_GO(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9)
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);

        if ((("10,11,15".IndexOf(strBase.Substring(0, 2), 0, StringComparison.OrdinalIgnoreCase) + 1) <= 0))
            return false;

        var intSoma = 0;
        var strDigito1 = "";

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * (10 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);

        switch (intResto)
        {
            case 0:
                strDigito1 = "0";
                break;

            case 1:
                var intNumero = int.Parse(strBase.Substring(0, 8));
                strDigito1 = (((intNumero >= 10103105) && (intNumero <= 10119997)) ? "1" : "0").Substring(((((intNumero >= 10103105) && (intNumero <= 10119997)) ? "1" : "0").Length - 1));
                break;

            default:
                strDigito1 = Convert.ToString((11 - intResto)).Substring((Convert.ToString((11 - intResto)).Length - 1));
                break;
        }

        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;
    }

    private static bool fncValida_Inscricao_Estadual_MA(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9 || strOrigem.Substring(0, 2) != "12")
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intSoma = 0;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * (10 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);
        var strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_MT(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length < 9)
            return false;

        while (strOrigem.Length <= 11)
            strOrigem = "0" + strOrigem;

        var strBase = (strOrigem.Trim() + "0000000000").Substring(0, 10);
        var intSoma = 0;
        var intPeso = 2;

        for (var intPos = 10; intPos >= 1; intPos = (intPos + -1))
        {
            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * intPeso);
            intSoma = (intSoma + intValor);
            intPeso = (intPeso + 1);

            if ((intPeso > 9))
                intPeso = 2;
        }

        var intResto = (intSoma % 11);
        var strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        var strBase2 = (strBase.Substring(0, 10) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_MS(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9 || strOrigem.Substring(0, 2) != "28")
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intSoma = 0;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * (10 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);
        var strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_MG(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 13)
            return false;

        if (strOrigem.Substring(0, 2).ToUpper() == "PR")
            return true;

        
        var strBase = (strOrigem.Trim() + "0000000000000").Substring(0, 13);
        var strBase2 = strBase.Substring(0, 3) + "0" + strBase.Substring(3, 9);
        var intNumero = 1;

        var intSoma = 0;

        for (var intPos = 0; intPos < 12; intPos++)
        {

            if (int.Parse(strBase2.Substring(intPos, 1)) * intNumero >= 10)
                intSoma += (int.Parse(strBase2.Substring(intPos, 1)) * intNumero) - 9;
            else
                intSoma += int.Parse(strBase2.Substring(intPos, 1)) * intNumero;

            intNumero = intNumero + 1;

            if (intNumero == 3)
                intNumero = 1;

        }

        intNumero = (int)((Math.Floor((Convert.ToDecimal(intSoma) + 10) / 10) * 10) - intSoma);
        if (intNumero % 10 == 0)
            intNumero = 0;

        if (intNumero != Convert.ToInt32(strOrigem.Substring(11, 1)))
            return false;


        intNumero = 3;
        intSoma = 0;

        for (var intPos = 0; intPos < 12; intPos++)
        {

            intSoma += int.Parse(strOrigem.Substring(intPos, 1)) * intNumero;

            intNumero = intNumero - 1;
            if (intNumero == 1)
                intNumero = 11;

        }

        intNumero = 11 - (intSoma % 11);
        if (intNumero >= 10)
            intNumero = 0;


        return intNumero == Convert.ToInt32(strOrigem.Substring(12, 1));

    }

    private static bool fncValida_Inscricao_Estadual_PA(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9 || strOrigem.Substring(0, 2) != "15")
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intSoma = 0;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * (10 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);
        var strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_PB(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9)
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intSoma = 0;
        int intValor;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * (10 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);
        intValor = (11 - intResto);

        if ((intValor > 9))
            intValor = 0;

        var strDigito1 = Convert.ToString(intValor).Substring((Convert.ToString(intValor).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;
        
    }

    private static bool fncValida_Inscricao_Estadual_PE(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9)
            return false;

        var strBase = (strOrigem.Trim() + "00000000000000").Substring(0, 14);
        var intSoma = 0;
        var intPeso = 2;
        int intValor;

        for (var intPos = 7; (intPos >= 1); intPos = (intPos + -1))
        {
            intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * intPeso);
            intSoma = (intSoma + intValor);
            intPeso = (intPeso + 1);

            if ((intPeso > 9))
                intPeso = 2;
        }

        var intResto = (intSoma % 11);
        intValor = (11 - intResto);

        if ((intValor >= 10))
            intValor = 0;

        if (intValor != Convert.ToInt32(strOrigem.Substring(7, 1)))
            return false;

        var strDigito1 = Convert.ToString(intValor).Substring((Convert.ToString(intValor).Length - 1));
        var strBase2 = (strBase.Substring(0, 7) + strDigito1);

        if (strBase2 != strOrigem.Substring(0, 8))
            return false;
        
        intSoma = 0;
        intPeso = 2;

        for (var intPos = 8; (intPos >= 1); intPos = (intPos + -1))
        {
            intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * intPeso);
            intSoma = (intSoma + intValor);
            intPeso = (intPeso + 1);

            if ((intPeso > 9))
                intPeso = 2;
        }

        intResto = (intSoma % 11);
        intValor = (11 - intResto);

        if ((intValor >= 10))
            intValor = 0;

        
        return intValor.ToString() == strOrigem.Substring(8, 1);
        
    }

    private static bool fncValida_Inscricao_Estadual_PI(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9)
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intSoma = 0;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * (10 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);
        var strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_PR(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 10)
            return false;

        var strBase = (strOrigem.Trim() + "0000000000").Substring(0, 10);
        var intSoma = 0;
        var intPeso = 2;
        int intValor;

        for (var intPos = 8; (intPos >= 1); intPos = (intPos + -1))
        {
            intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * intPeso);
            intSoma = (intSoma + intValor);
            intPeso = (intPeso + 1);

            if ((intPeso > 7))
                intPeso = 2;
        }

        var intResto = (intSoma % 11);
        var strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);
        intSoma = 0;
        intPeso = 2;

        for (var intPos = 9; (intPos >= 1); intPos = (intPos + -1))
        {
            intValor = int.Parse(strBase2.Substring((intPos - 1), 1));
            intValor = (intValor * intPeso);
            intSoma = (intSoma + intValor);
            intPeso = (intPeso + 1);

            if ((intPeso > 7))
                intPeso = 2;
        }

        intResto = (intSoma % 11);
        var strDigito2 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        strBase2 = (strBase2 + strDigito2);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_RJ(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 8)
            return false;

        var strBase = (strOrigem.Trim() + "00000000").Substring(0, 8);
        var intSoma = 0;
        var intPeso = 2;

        for (var intPos = 7; (intPos >= 1); intPos = (intPos + -1))
        {
            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * intPeso);
            intSoma = (intSoma + intValor);
            intPeso = (intPeso + 1);

            if ((intPeso > 7))
                intPeso = 2;
        }

        var intResto = (intSoma % 11);
        var strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        var strBase2 = (strBase.Substring(0, 7) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_RN(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        var strBase = "";
        switch (strOrigem.Length)
        {
            case 9:
                strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
                break;

            case 10:
                strBase = (strOrigem.Trim() + "000000000").Substring(0, 10);
                break;
        }

        var intSoma = 0;

        if ((strBase.Substring(0, 2) == "20") && strBase.Length == 9)
        {

            for (var intPos = 1; (intPos <= 8); intPos++)
            {
                var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
                intValor = (intValor * (10 - intPos));
                intSoma = (intSoma + intValor);
            }

            intSoma = (intSoma * 10);
            var intResto = (intSoma % 11);
            var strDigito1 = ((intResto > 9) ? "0" : Convert.ToString(intResto)).Substring((((intResto > 9) ? "0" : Convert.ToString(intResto)).Length - 1));
            var strBase2 = (strBase.Substring(0, 8) + strDigito1);

            return strBase2 == strOrigem;

        }


        if (strBase.Length == 10)
        {
            intSoma = 0;

            for (var intPos = 1; (intPos <= 9); intPos++)
            {
                var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
                intValor = (intValor * (11 - intPos));
                intSoma = (intSoma + intValor);
            }

            intSoma = (intSoma * 10);
            var intResto = (intSoma % 11);
            var strDigito1 = ((intResto > 10) ? "0" : Convert.ToString(intResto)).Substring((((intResto > 10) ? "0" : Convert.ToString(intResto)).Length - 1));
            var strBase2 = (strBase.Substring(0, 9) + strDigito1);

            return strBase2 == strOrigem;

        }

        return false;

    }

    private static bool fncValida_Inscricao_Estadual_RO(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 14)
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var strBase2 = strBase.Substring(3, 5);
        var intSoma = 0;
        int intValor;

        for (var intPos = 1; (intPos <= 5); intPos++)
        {
            intValor = int.Parse(strBase2.Substring((intPos - 1), 1));
            intValor = (intValor * (7 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);
        intValor = (11 - intResto);

        if ((intValor > 9))
            intValor = (intValor - 10);

        var strDigito1 = Convert.ToString(intValor).Substring((Convert.ToString(intValor).Length - 1));
        strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_RR(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9 || strOrigem.Substring(0, 2) != "24")
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intSoma = 0;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = intValor * intPos;
            intSoma += intValor;
        }

        var intResto = (intSoma % 9);
        var strDigito1 = Convert.ToString(intResto).Substring((Convert.ToString(intResto).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_RS(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 10 || Convert.ToInt32(strOrigem) > 467)
            return false;

        var strBase = (strOrigem.Trim() + "0000000000").Substring(0, 10);
        var intSoma = 0;
        var intPeso = 2;
        var intValor = 0;

        for (var intPos = 9; (intPos >= 1); intPos = (intPos + -1))
        {
            intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * intPeso);
            intSoma = (intSoma + intValor);
            intPeso = (intPeso + 1);

            if ((intPeso > 9))
                intPeso = 2;
        }

        var intResto = (intSoma % 11);
        intValor = (11 - intResto);

        if ((intValor > 9))
            intValor = 0;

        var strDigito1 = Convert.ToString(intValor).Substring((Convert.ToString(intValor).Length - 1));
        var strBase2 = (strBase.Substring(0, 9) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_SC(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9)
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intSoma = 0;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * (10 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);
        var strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;
        
    }

    private static bool fncValida_Inscricao_Estadual_SE(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 9)
            return false;

        var strBase = (strOrigem.Trim() + "000000000").Substring(0, 9);
        var intSoma = 0;
        int intValor;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            intValor = int.Parse(strBase.Substring((intPos - 1), 1));
            intValor = (intValor * (10 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);
        intValor = (11 - intResto);

        if ((intValor > 9))
            intValor = 0;

        var strDigito1 = Convert.ToString(intValor).Substring((Convert.ToString(intValor).Length - 1));
        var strBase2 = (strBase.Substring(0, 8) + strDigito1);

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_SP(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        string strBase;
        string strBase2;
        int intSoma;
        int intPeso;

        if ((strOrigem.Substring(0, 1) == "P"))
        {
            strBase = (strOrigem.Trim() + "0000000000000").Substring(0, 13);
            intSoma = 0;
            intPeso = 1;

            for (var intPos = 1; (intPos <= 8); intPos++)
            {
                var intValor = int.Parse(strBase.Substring((intPos), 1));
                intValor = (intValor * intPeso);
                intSoma = (intSoma + intValor);
                intPeso = (intPeso + 1);

                if ((intPeso == 2))
                    intPeso = 3;

                if ((intPeso == 9))
                    intPeso = 10;
            }

            var intResto = (intSoma % 11);
            var strDigito1 = Convert.ToString(intResto).Substring((Convert.ToString(intResto).Length - 1));
            strBase2 = (strBase.Substring(0, 9) + (strDigito1 + strBase.Substring(10, 3)));
        }
        else
        {
            strBase = (strOrigem.Trim() + "000000000000").Substring(0, 12);
            intSoma = 0;
            intPeso = 1;

            for (var intPos = 1; (intPos <= 8); intPos++)
            {
                var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
                intValor = (intValor * intPeso);
                intSoma = (intSoma + intValor);
                intPeso = (intPeso + 1);

                if ((intPeso == 2))
                    intPeso = 3;

                if ((intPeso == 9))
                    intPeso = 10;
            }

            var intResto = (intSoma % 11);
            var strDigito1 = Convert.ToString(intResto).Substring((Convert.ToString(intResto).Length - 1));
            strBase2 = (strBase.Substring(0, 8) + (strDigito1 + strBase.Substring(9, 2)));
            intSoma = 0;
            intPeso = 2;

            for (var intPos = 11; (intPos >= 1); intPos = (intPos + -1))
            {
                var intValor = int.Parse(strBase.Substring((intPos - 1), 1));
                intValor = (intValor * intPeso);
                intSoma = (intSoma + intValor);
                intPeso = (intPeso + 1);

                if ((intPeso > 10))
                    intPeso = 2;
            }

            intResto = (intSoma % 11);
            var strDigito2 = Convert.ToString(intResto).Substring((Convert.ToString(intResto).Length - 1));
            strBase2 = (strBase2 + strDigito2);
        }

        return strBase2 == strOrigem;

    }

    private static bool fncValida_Inscricao_Estadual_TO(string Ds_Inscricao_Estadual)
    {

        var strOrigem = Ds_Inscricao_Estadual;
        if (strOrigem.Length != 11 || strOrigem.Substring(2, 2) != "01" || strOrigem.Substring(2, 2) != "02" || strOrigem.Substring(2, 2) != "03" || strOrigem.Substring(2, 2) != "99")
            return false;

        var strBase = (strOrigem.Trim() + "00000000000").Substring(0, 11);
        var strBase2 = (strBase.Substring(0, 2) + strBase.Substring(4, 6));
        var intSoma = 0;

        for (var intPos = 1; (intPos <= 8); intPos++)
        {
            var intValor = int.Parse(strBase2.Substring((intPos - 1), 1));
            intValor = (intValor * (10 - intPos));
            intSoma = (intSoma + intValor);
        }

        var intResto = (intSoma % 11);
        var strDigito1 = ((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Substring((((intResto < 2) ? "0" : Convert.ToString((11 - intResto))).Length - 1));
        strBase2 = (strBase.Substring(0, 10) + strDigito1);

        return strBase2 == strOrigem;


    }

}

If you still don't know what the CLR is and how to use functions written in C# (.NET) by the SQL Server database, find out more by accessing my post Introduction to SQL CLR (Common Language Runtime) in SQL Server

That's it, folks!
Until the next post!