近日有一位网友问到EAN-13码的校验位计算问题(http://topic.csdn.net/u/20120426/23/7d6dfd64-ca7a-494e-8d34-c6da501b6046.html),因为之前工作中也遇到过类似的问题,写了一个函数,供大家参考:
EAN-13商品条码中的校验符的作用是检验前面12个数字是否正确,在条码机每次读入数据时,都会计算一次数据符的校验并与校验符进行比对。
校验符的计算方法:
将12个数据符从左起将所有的奇数位相加得出一个数a,
将所有的偶数位相加得出一个数b,
然后将数b乘以3再与a相加得到数c,
用10减去数c的个位数,
如果结果不为10则检验符为结果本身,如果为10则检验符为0
根据以上规则,使用SQL写一个简单的函数如下:
/**
--功能:获取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,