Мне нужно написать хранимую процедуру или funtion для проверки вставки кода EAN13 в SQL Server.SQL Server хранимой процедуры Проверка EAN-кода
Может ли кто-нибудь мне помочь?
Мне нужно написать хранимую процедуру или funtion для проверки вставки кода EAN13 в SQL Server.SQL Server хранимой процедуры Проверка EAN-кода
Может ли кто-нибудь мне помочь?
Решено
Я создал функцию для проверки:
CREATE FUNCTION [sp_ean](@Ean varchar(max)) RETURNS INT AS BEGIN DECLARE @Factor INT DECLARE @Sum INT DECLARE @Len INT DECLARE @CC INT DECLARE @CA INT DECLARE @Result NVARCHAR(MAX) SET @Len = LEN(@Ean) SET @Sum = 0 SET @Factor = 3 IF @Len = 14 OR @Len = 13 OR @Len = 12 OR @Len = 8 BEGIN WHILE @Len > 0 BEGIN IF @Len 13 BEGIN SET @Sum = @Sum + SUBSTRING(@Ean,@Len,1) * @Factor SET @Factor = 4 - @Factor END SET @Len = @Len - 1 END SET @CC = ((1000 - @Sum) % 10) SET @CA = SUBSTRING(@Ean,LEN(@Ean),1) IF @CC = @CA BEGIN SET @Result = 0 END ELSE BEGIN SET @Result = 1 END END ELSE BEGIN SET @Result = 1 END RETURN (@Result) END
Результат: в истинный или к ложным
Спасибо!
Возможно, вы захотите упомянуть, что EAN13 - очень распространенный код, используемый для идентификации продуктов на счетчиках. –
Что вы подразумеваете под "IF @Len 13" ?? –
Значение "IF @Len = 13" –
Возможно, вы найдете что-то подобное, чтобы быть чище. Он обрабатывает вход переменной длины и также имеет то преимущество, что его можно использовать в качестве контрольного ограничения, как указано Joe Celko.
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
Что вы пробовали? Пожалуйста, прочитайте http://stackoverflow.com/help/how-to-ask перед отправкой вопросов – jean
Что вы подразумеваете под * включением *? А также: проверить *** как ***? Поиск по набору допустимых значений? Не совсем понятно .... –