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