Генератор EAN13

Скрипты, запросы.

Генератор EAN13

Сообщение invisib1e » 16 авг 2012, 15:01

Процедура подсчета контрольной суммы EAN13:
Код: Выделить всё
create procedure ean13 (@ean varchar(100))
as
begin
   set nocount on
   declare @ean_1 int = cast(substring(@ean,1,1) as int)+cast(substring(@ean,3,1) as int)+cast(substring(@ean,5,1) as int)+cast(substring(@ean,7,1) as int)+cast(substring(@ean,9,1) as int)+cast(substring(@ean,11,1) as int)
   declare @ean_2 int = (cast(substring(@ean,2,1) as int)+cast(substring(@ean,4,1) as int)+cast(substring(@ean,6,1) as int)+cast(substring(@ean,8,1) as int)+cast(substring(@ean,10,1) as int)+cast(substring(@ean,12,1) as int))*3
   declare @ean13 varchar(20) = case when len(@ean) not between 12 and 13 then 'WRONG NUMBER' else substring(@ean,1,12)+cast(right(10-right(@ean_1+@ean_2,1),1) as char) end
   select
      [EAN13_IN] = @ean,
      [INFO] = case
               when len(@ean) not between 12 and 13 then 'ERROR '+convert(varchar,len(@ean))
               when @ean = substring(@ean,1,12) then 'CALCULATION'
               when @ean = @ean13 then 'CORRECT' else 'INCORRECT' end,
      [EAN13_OUT] = @ean13
   set nocount off
end


Работает процедура следующим образом:
Код: Выделить всё
exec ean13 100000000000

Вывод будет такой - "100000000000 CALCULATION 1000000000009", также имеется возможность проверить уже готовый EAN13 код на валидность.
invisib1e
The Admin
 
Сообщения: 55
Зарегистрирован: 16 мар 2010, 22:28
Откуда: Russia, Moscow
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.

Re: Генератор EAN13

Сообщение invisib1e » 16 авг 2012, 15:15

Процедура массовой генерации штрих кодов EAN13:
Код: Выделить всё
create procedure ean13_generate (@ean13 numeric(13), @j int)
as
begin
   if len(@ean13) = 12
   begin
      declare @ean_output table(id_num numeric(16,0) not null identity (1, 1) primary key, ean13_in varchar(13), info varchar(255), ean13_out varchar(13))
      declare @i int = 0
      while @i <> @j
      begin
         insert into @ean_output (ean13_in, info, ean13_out) exec ean13 @ean13
         set @ean13 += 1
         set @i += 1
      end
      select ean13_in, ean13_out from @ean_output
   end
   else
   begin
      select ERROR = 'Номер должен состоять из 12 цифр'
   end
end


Работает процедура следующим образом:
Код: Выделить всё
exec ean13_generate 100000000000, 5

Вывод будет такой:
100000000000 - 1000000000009
100000000001 - 1000000000016
100000000002 - 1000000000023
100000000003 - 1000000000030
100000000004 - 1000000000047

ВАЖНО: Для работы данного скрипта, должен быть установлен первый скрипт генерации EAN13.
invisib1e
The Admin
 
Сообщения: 55
Зарегистрирован: 16 мар 2010, 22:28
Откуда: Russia, Moscow
Благодарил (а): 1 раз.
Поблагодарили: 2 раз.


Вернуться в Transact-SQL

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron