Função modulo11 para MySQL

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.

2 comentários em “Função modulo11 para MySQL

Deixe um comentário