计算EAN-13商品条码校验位的SQL函数

来源:互联网 发布:sql distinct * 用法 编辑:程序博客网 时间:2024/04/25 21:11

    近日有一位网友问到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)asbegin  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  endgoselect dbo.ean13('690102807501')/**----5(1 行受影响)**/