Проверка кода EAN хранимой процедуры SQL Server
Мне нужно написать хранимую процедуру или функцию для проверки вставки кода EAN13 в SQL Server.
Может кто-нибудь мне помочь?
2 ответа
Решение
Решено,
Я создал функцию для проверки:
CREATE FUNCTION [sp_ean] (@ Ean varchar (max)) ВОЗВРАЩАЕТ INT AS НАЧАТЬ ОБЪЯВИТЬ @Factor INT ОБЪЯВИТЬ @Sum INT ОБЪЯВИТЬ @Len INT ОБЪЯВИТЬ @CC INT ОБЪЯВИТЬ @CA INT ОБЪЯВИТЬ @Result NVARCHAR(МАКС) SET @Len = LEN(@Ean) SET @Sum = 0 SET @Factor = 3 ЕСЛИ @Len = 14 ИЛИ @Len = 13 ИЛИ @Len = 12 ИЛИ @Len = 8 НАЧАТЬ WHILE @Len > 0 НАЧАТЬ ЕСЛИ @ Лен 13 НАЧАТЬ SET @Sum = @Sum + SUBSTRING(@Ean,@Len,1) * @Factor SET @Factor = 4 - @Factor КОНЕЦ SET @Len = @Len - 1 КОНЕЦ SET @CC = ((1000 - @Sum) % 10) SET @CA = SUBSTRING(@Ean,LEN(@Ean),1) IF @CC = @CA НАЧАТЬ SET @Result = 0 КОНЕЦ ELSE НАЧАТЬ SET @Result = 1 КОНЕЦ КОНЕЦ ELSE НАЧАТЬ SET @Result = 1 КОНЕЦ ВОЗВРАТ (@Result) КОНЕЦ
Результат: от0 до true или от 1 до false
Спасибо!
Возможно, вы найдете что-то вроде этого, чтобы быть чище. Он обрабатывает ввод переменной длины, а также имеет то преимущество, что его можно использовать в качестве проверочного ограничения, на что указал Джо Селко.
CASE WHEN CAST(SUBSTRING(REVERSE(ean), 1, 1) AS INTEGER) =
10 - (
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 2, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 3, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 4, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 5, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 6, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 7, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 8, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 9, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 10, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 11, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 12, 1)) AS INT)
1 * CAST(SUBSTRING(REVERSE(ean) + '000000', 13, 1)) AS INT)
3 * CAST(SUBSTRING(REVERSE(ean) + '000000', 14, 1)) AS INT)
) % 10
THEN 1 ELSE 0 END