Boa tarde!
Pessoal, segue abaixo função Módulo 11 para cálculo do dígito verificador Nosso Número 16 posições referente a Caixa Econômica Federal.
Caso tenham alguma dúvida ou problema, por favor entre em contato.
Como utilizar a função:
– Nosso Número com 15 posições sempre iniciando com 8
– Utiliza 1 dígito verificador calculado através do módulo 11, com peso 2 a 9.
Exemplo de cálculo do D1:
Nosso Número usado para cálculo: 801000901200200
SELECT calculo_mod11('801000901200200') 1 rows fetched (0 ms) RESULT: 3
Sintaxe de criação: MySQL
-- ==================== INÍCIO DO SCRIPT ==================== -- ==================== INÍCIO DO SCRIPT ==================== -- CRIAR A FUNCTION calculo_mod11 -- ========================================================== DROP FUNCTION IF EXISTS calculo_mod11; CREATE DEFINER = 'root'@'%' FUNCTION `calculo_mod11`(CODIGO VARCHAR(15)) RETURNS char(1) CHARSET latin1 DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT '' BEGIN /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: ENGINE: InnoDB MYSQL 5.5 :: DATA DESENVOLV: 28/09/2012 :: AUTOR: LUCAS S. ALMEIDA :: FINALIDADE: MÓDULO 11 PARA CÁLCULO DO DÍGITO :: VERIFICADOR DE AGÊNCIA, CÓDIGO DE CEDENTE, NOSSO NUMERO E ETC. :: :: DESCRIÇÃO: :: - NOSSO NÚMERO COM 15 POSIÇÕES SEMPRE INICIANDO COM 8 :: - UTILIZA 1 DÍGITO VERIFICADOR CALCULADO ATRAVÉS DO MÓDULO 11, :: COM PESO 2 A 9. :: 8NNNNNNNNNNNNNN - D1 :: SE O RESULTADO DA SUBTRAÇÃO FOR MAIOR QUE 9 (NOVE) O DV SERÁ :: 0 (ZERO), CASO CONTRÁRIO O RESULTADO SERÁ O DV. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ DECLARE MODULOM11, PESO, BASE, SOMAM11, TAMM11, CONTADOR, IM11, SOBRAM11, DIGITOM11 INTEGER; DECLARE DV CHAR(1); SET MODULOM11 = 11; SET PESO = 2; SET BASE = 9; SET SOMAM11 = 0; SET TAMM11 = LENGTH(CODIGO); SET CONTADOR = TAMM11; SET IM11 = 1; SET SOBRAM11 = -1; WHILE IM11 <= TAMM11 DO SET SOMAM11 = SOMAM11 + (SUBSTRING(CODIGO, CONTADOR,1) * PESO); SET CONTADOR = CONTADOR - 1; SET PESO = PESO + 1; IF PESO > BASE THEN SET PESO = 2; END IF; SET IM11 = IM11 + 1; END WHILE; SET SOBRAM11 = MOD(SOMAM11,MODULOM11); SET DIGITOM11 = (MODULOM11 - SOBRAM11); IF DIGITOM11 > 9 THEN SET DIGITOM11 = 0; END IF; SET DV = CAST(DIGITOM11 AS CHAR(1)); RETURN (DV); END; -- ==================== FINAL DA EXECUÇÃO ====================
Espero que tenham gostado.
Tentei aqui e recebi um erro de sintaxe que não consegui identificar o que era.
Amigo, realmente no copiar e colocar faltou um pedaço.
Grato!!!
Corrigido.