文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>EAN13标准条码算法(使用SQL实现)

EAN13标准条码算法(使用SQL实现)

时间:2010-11-12  来源:枢木

 /***************************************************/
 -- ISBN转为EAN13标准条码基本算法:(如:7-119-04892-5)
 -- 1. 去掉末尾校验码5(711904892),前面统一加上978(图书),为:978711904892
 -- 2. 从ISBN序号2开始,所有偶数位的数字(7 7 1 0 8 2)求和:a1=7+7+1+0+8+2=25
 -- 3. 将a1乘以3                                        :a2=a1*3=25*3=75
 -- 4. 从ISBN序号1开始,所有奇数位的数字(9 8 1 9 4 9)求和:b =9+8+1+9+4+9=40
 -- 5. 将a2加b                                          :c1=a2+b1=75+40=115
 -- 6. 取c1的个位数                                     :c2=5
 -- 7. 用10减去c2                                       :d =10-5=5
 -- 8. d即为校验位数值,将它置于最后一位,得到EAN13标准条码为:9787119048925
  /***************************************************/

SQL代码:

代码
ALTER function [dbo].[Fn_GetEAN13BarCode](@TypeCode bigint, @CodeSeed bigint)
returns varchar(13) -- 返回标准条码 EAN13条码
as
begin
declare @BarCode varchar(13) -- EAN13条码
declare @Seed varchar(13)
declare @Check int -- 校验码

-- 校验码种子
set @Seed= cast((@TypeCode*10000000000+@CodeSeed) as varchar(13))

-- 关键算法
set @Check=10-right(( substring(@Seed,1,1)
+substring(@Seed,3,1)
+substring(@Seed,5,1)
+substring(@Seed,7,1)
+substring(@Seed,9,1)
+substring(@Seed,11,1))
+3*(substring(@Seed,2,1)
+substring(@Seed,4,1)
+substring(@Seed,6,1)
+substring(@Seed,8,1)
+substring(@Seed,10,1)
+substring(@Seed,12,1))
,
1)

if @Check=10
begin
set @Check=0
end

set @BarCode=@Seed+cast(@Check as char(1))

return @BarCode

end

 

调用示例:

 

print [dbo].[Fn_GetEAN13BarCode](0,978711904892) -- 返回 9787119048925 其中5为计算出的校验码

 

 

调用综合示例:

代码
ALTER function [dbo].[Fn_GetFullISBN](@ISBN varchar(20))
-- 返回13位ISBN 如:9787119048925
returns varchar(13)
as
begin
/***************************************************/
set @ISBN=isnull(@ISBN,'')

set @ISBN=replace(@ISBN,'','1')
set @ISBN=replace(@ISBN,'','2')
set @ISBN=replace(@ISBN,'','3')
set @ISBN=replace(@ISBN,'','4')
set @ISBN=replace(@ISBN,'','5')
set @ISBN=replace(@ISBN,'','6')
set @ISBN=replace(@ISBN,'','7')
set @ISBN=replace(@ISBN,'','8')
set @ISBN=replace(@ISBN,'','9')
set @ISBN=replace(@ISBN,'','0')

-- 去除"-"
set @ISBN=replace(@ISBN,'-','')
-- 去除" "
set @ISBN=replace(@ISBN,' ','')
/***************************************************/
declare @len int
set @len=len(@ISBN)
if @len>13
begin
set @len=13
end

set @ISBN=substring(@ISBN,1,@len)
/***************************************************/

-- 9位ISBN 如:7-119-04892 需要计算校检码
if @ISBN like '[7][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
begin
set @ISBN='978'+@ISBN
set @ISBN=dbo.Fn_GetEAN13BarCode(0,@ISBN)
end
-- 10位ISBN 如:7-119-04892-5 加978直接返回
else if @ISBN like '[7][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
begin
set @ISBN='978'+@ISBN
end
-- 12位ISBN 如:978-7-119-04892 需要计算校检码
else if @ISBN like '978[7][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
begin
set @ISBN=dbo.Fn_GetEAN13BarCode(0,@ISBN)
end
-- 13位ISBN 如:978-7-119-04892-5 直接返回
else if @ISBN like '978[7][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
begin
set @ISBN=@ISBN
end
else
begin
set @ISBN='不可识别的ISBN号'
end

return @ISBN

end

 

 

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载