I just had to scour the internet for this code yet again so I figured I would put it here so I can find it a little faster the next time and hopefully you found it a little faster too :)
Check this. The code below can check digit in all GTIN's (EAN8, EAN13, EAN14, UPC/A, UPC/E)
CREATE FUNCTION [dbo].[check_digit]
(
@GTIN VARCHAR(14)
)
RETURNS TINYINT
AS
BEGIN
DECLARE @Index TINYINT,
@Multiplier TINYINT,
@Sum TINYINT,
@checksum TINYINT,
@result TINYINT,
@GTIN_strip VARCHAR(13)
SELECT @GTIN_strip = SUBSTRING(@GTIN,1,LEN(@GTIN)-1);
SELECT @Index = LEN(@GTIN_strip),
@Multiplier = 3,
@Sum = 0
WHILE @Index > 0
SELECT @Sum = @Sum + @Multiplier * CAST(SUBSTRING(@GTIN_strip, @Index, 1) AS TINYINT),
@Multiplier = 4 - @Multiplier,
@Index = @Index - 1
SELECT @checksum = CASE @Sum % 10
WHEN 0 THEN '0'
ELSE CAST(10 - @Sum % 10 AS CHAR(1))
END
IF (SUBSTRING(@GTIN,LEN(@GTIN),1) = @checksum)
RETURN 1; /*true*/
RETURN 0; /*false*/
END