Sexta, 22 de Novembro de 2024
Busca no site:
Ok
Home
Links
Soluções
Utilitários
Publicações
Curiosidades
Produtos
Diversões
Apps Android
Contato
Mapa do Site
Sobre Nós
©2024 CJDinfo®
Detalhe Solução
SQL-Server: Cálculo Dígito Módulo 11 (CPF, CNPJ, RG, PIS, etc)
:
CREATE PROC spCalcDigMod11 /************************************************************** * * * spCalcDigMod11 Dado, NumDig, LimMult, X10, @Retorno * * * * CJDinfo - V6.0 - Mai/2001~Ago/2024 * * * * Retorna o(s) NumDig Dígitos de Controle Módulo 11 do * * Dado, limitando o Valor de Multiplicação em LimMult, * * multiplicando a soma por 10, se indicado: * * * * Números Comuns: NumDig LimMult X10 * * CPF 2 12 1 * * CNPJ 2 9 1 * * PIS,C/C,Age 1 9 1 * * RG SSP-SP 1 9 1 * * * **************************************************************/ @Dado varchar(100), @NumDig tinyint, @LimMult tinyint, @X10 tinyint, @Retorno varchar(10) OutPut AS DECLARE @@Soma int DECLARE @@Mult tinyint DECLARE @@i tinyint DECLARE @@n tinyint DECLARE @@Dig int -- Se nao X10, um so digito: IF (@X10 = 0) SELECT @NumDig = 1 -- Para o Numero de Digitos Verificadores pedidos: SELECT @@n = 1 WHILE (@@n <= @NumDig) BEGIN SELECT @@Soma = 0 SELECT @@Mult = 2 -- Para cada um dos digitos dados: SELECT @@i = DATALENGTH(@Dado) WHILE (@@i >= 1) BEGIN -- Totaliza a soma e Atualiza Multiplicador: SELECT @@Soma = @@Soma + (@@Mult * (ASCII(SUBSTRING(@Dado, @@i, 1)) - 48)) SELECT @@Mult = @@Mult + 1 IF (@@Mult > @LimMult) SELECT @@Mult = 2 -- Proximo Digito dado: SELECT @@i = @@i - 1 END -- Calcula o Modulo 11: IF (@X10 = 1) SELECT @@Dig = ((@@Soma * 10) % 11) % 10 ELSE SELECT @@Dig = @@Soma % 11 IF (@@Dig = 10) SELECT @Dado = @Dado + 'X' ELSE SELECT @Dado = @Dado + RIGHT(STR(@@Dig, 10, 0), 1) -- Proximo Digito de Controle: SELECT @@n = @@n + 1 END -- Retorna Digitos convertidos para inteiro: SELECT @Retorno = RIGHT(@Dado, @NumDig) GO
¤ Links Relacionados:
- Veja todas as soluções do site
Gostou? Compartilhe ou comente:
Nome:
Email:
Comentário:
Retornar