EAN-13码效验码问题

anshengcs 2012-04-26 11:55:04
在SQL查询出13位条码的最后一位效验码是否正确
比如:6901028075013 这个条码效验码是3,正确的应该是5
查出效验码不对的数据
...全文
268 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2012-04-27
  • 打赏
  • 举报
回复

--> 测试数据: @T
declare @T table (col varchar(13))
insert into @T
select 8271231212124 union all
select 1231228892828 union all
select 1237884919213 union all
select 4683829191026 union all
select 2499583891217 union all
select 6901028075013

--得到不对的,并显示正确的情况
select
col as 错误值,
dbo.[Get_CheckCode](col) as 正确值
from @T
where col<>dbo.[Get_CheckCode](col)
/*
错误值 正确值
------------- -------------
4683829191026 4683829191027
6901028075013 6901028075015
*/
叶子 2012-04-27
  • 打赏
  • 举报
回复
我写过一个函数,可以根据12位得到13位,你直接调用即可。

http://blog.csdn.net/maco_wang/article/details/4738762
百年树人 2012-04-27
  • 打赏
  • 举报
回复
1、取出前12位
2、偶数位的和乘以3,再加上奇数位的和,取个位数
3、用10减去2中的结果,取个位数
anshengcs 2012-04-27
  • 打赏
  • 举报
回复
谢谢两位高人,问题已解决啦
叶子 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 2 楼 的回复:
我写过一个函数,可以根据12位得到13位,你直接调用即可。

http://blog.csdn.net/maco_wang/article/details/4738762


早知道你有我就不写了
[/Quote]
我那个是很久以前的了,需要优化了,呵呵...
百年树人 2012-04-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
我写过一个函数,可以根据12位得到13位,你直接调用即可。

http://blog.csdn.net/maco_wang/article/details/4738762
[/Quote]

早知道你有我就不写了
百年树人 2012-04-27
  • 打赏
  • 举报
回复
/**
--功能:获取EAN-13码的检验位
--Author:josy(百年树人)
--参数@s:EAN-13码前12位
**/
create function EAN13(@s char(12))
returns varchar(1)
as
begin
return (10-(
(cast(substring(@s,2,1) as int)+substring(@s,4,1)+substring(@s,6,1)
+substring(@s,8,1)+substring(@s,10,1)+substring(@s,12,1)
)*3
+substring(@s,1,1)+substring(@s,3,1)+substring(@s,5,1)
+substring(@s,7,1)+substring(@s,9,1)+substring(@s,11,1)
)%10)%10
end
go


select dbo.ean13(left('6901028075013',12))
/**

----
5

(1 行受影响)
**/

--drop function ean13

34,587

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧