Funció del SQLServer per calcular el dígit de control d’un codi EAN13:
CREATE FUNCTION [dbo].[fn_EAN13] (@Barcode nvarchar(12)) RETURNS nvarchar(13) AS BEGIN DECLARE @SUM int , @COUNTER int, @RETURN varchar(13), @Val1 int, @Val2 int SET @COUNTER = 1 SET @SUM = 0 WHILE @Counter < 13 BEGIN SET @VAL1 = SUBSTRING(@Barcode,@counter,1) * 1 SET @VAL2 = SUBSTRING(@Barcode,@counter + 1,1) * 3 SET @SUM = @VAL1 + @SUM SET @SUM = @VAL2 + @SUM SET @Counter = @Counter + 2; END SET @SUM=(10-(@SUM%10))%10 SET @Return = @BARCODE + CONVERT(varchar,((@SUM))) RETURN @Return END
OITM -> CodeBars
OBCD -> BcdCode, ItemCode (join a la OITM), BcdName
Comprovació de tots els articles que tenen el codi de barres informat erroneament:
SELECT IT.ItemCode,IT.CodeBars,dbo.fn_EAN13(SUBSTRING(IT.CodeBars,1,12)) FROM OITM IT JOIN OBCD CB on CB.ItemCode=IT.ItemCode WHERE LEN(IT.CodeBars)>0 and dbo.fn_EAN13(SUBSTRING(IT.CodeBars,1,12))<>IT.CodeBars