日期:2014-05-16  浏览次数:20577 次

(转)商品EAN13条码的生成

转自:http://www.cnblogs.com/DelphiFan/archive/2009/07/26/1645572.html

?

最近客户要求在货品资料中生成商品条码(即EAN13,国际商品条码),虽然系统中有商品条码生成的工具,但是对不上号,根本无法使用,客户的货品资料已经有部分有条码,更重要的是客户要求生成商品条码的货品无法正常筛选出来(比如:GW开头,或者是GM开头,而且要求的是GW和GM后面全是数字的货品才要求生成),客户又急着用,没有办法的情况下,就自己动手写了一个小工具,虽然客户无法使用,但是对于维护客户的商品条码生成,确是相当的方便,现记录下,以便将来查看:
生成EAN13条码的SQL函数代码:

create function dbo.EAN13(@value varchar(13))
    returns varchar(13)
as
begin
    declare @s1 int ,@s2 int ,@s3 int
    declare @t table (id int identity(1,1),b bit)
    insert into @t(b)
       select top 13 1 from syscolumns 
    set @value='0'+reverse(@value)
    select @s1=sum(cast(substring(@value,id,1) as int))
    from @t a
    where len(@value)>=id and id%2=0
    set @s1=@s1*3
    select @s2=sum(cast(substring(@value,id,1) as int))
    from @t a
    where len(@value)>=id and id>=3 and id%2=1
    set @s3=right(@s1+@s2,1)
return left(reverse(@value),12)+ltrim(10-case @s3 when '0' then '10' else @s3 end)
end
go

函数调用:
select dbo.ean13(694386035966) 返回值:6943860359663
在程序中执行时,可以手工写入SQL语句,这样,可以自由的提出要生成的货品资料,例如:
select code,name,standardcode from goods where (patindex('GW[0-9]%',Code)>0 or patindex('GM[0-9]%',Code)>0) and
(standardcode is? null)
动态的指定SQL语句,相当方便。