Código: Selecionar todos
FUNCTION CalculaDigito( cNumero, cModulo )
LOCAL nFator, nCont, nSoma, nResto, nModulo, cCalculo
hb_Default( @cModulo, "11" )
IF Empty( cNumero )
RETURN ""
ENDIF
cCalculo := AllTrim( cNumero )
nModulo := Val( cModulo )
nFator := 2
nSoma := 0
IF nModulo == 10
FOR nCont = Len( cCalculo ) To 1 Step -1
nSoma += Val( Substr( cCalculo, nCont, 1 ) ) * nFator
nFator += 1
NEXT
ELSE
FOR nCont = Len( cCalculo ) To 1 Step -1
nSoma += Val( Substr( cCalculo, nCont, 1 ) ) * nFator
IF nFator == 9
nFator := 2
ELSE
nFator += 1
ENDIF
NEXT
ENDIF
nResto := 11 - Mod( nSoma, 11 )
IF nResto > 9
nResto := 0
ENDIF
cCalculo := Str( nResto, 1 )
RETURN cCalculo
Código: Selecionar todos
CREATE FUNCTION `ze_CalculaDigito`(
`cNumero` VARCHAR(30),
`nModulo` INT(11)
)
RETURNS VARCHAR(1)
BEGIN
DECLARE nFator INT(11);
DECLARE nSoma INT(11);
DECLARE nCont INT(11);
DECLARE nResto INT(11);
IF LENGTH( cNumero ) < 1 THEN
RETURN '';
END IF;
SET nFator = 2;
SET nSoma = 0;
SET nCont = LENGTH( cNumero );
IF nModulo = 10 THEN
WHILE nCont > 0 DO
SET nSoma = nSoma + ( CAST( SUBSTR( cNumero, nCont, 1 ) AS INTEGER ) * nFator ) ;
SET nFator = nFator + 1;
SET nCont = nCont - 1;
END WHILE;
ELSE
WHILE nCont > 0 DO
SET nSoma = nSoma + ( CAST( SUBSTR( cNumero, nCont, 1 ) AS INTEGER ) * nFator ) ;
IF nFator = 9 THEN
SET nFator = 2;
ELSE
SET nFator = nFator + 1;
END IF;
SET nCont = nCont - 1;
END WHILE;
END IF;
SET nResto = 11 - MOD( nSoma, 11 );
IF nResto > 9 THEN
SET nResto = 0;
END IF;
RETURN CAST( nResto AS VARCHAR(1) );
END
