首页 > 代码库 > 得到条形码的校验位函数

得到条形码的校验位函数

一、校验码说明:

 

校验码的计算方法

1.        代码位置序号
代码位置序号是指包括校验码在内的,由右至左的顺序号(校验码的代码位置序号为1)。

2.        计算步骤
校验码的计算步骤如下:
a.从代码位置序号2开始,所有偶数位的数字代码求和。
b.将步骤a的和乘以3。
c.从代码位置序号3开始,所有奇数位的数字代码求和。
d.将步骤b与步骤c的结果相加。
e.用大于或等于步骤d所得结果且为10最小整数倍的数减去步骤d所得结果,其差即为所求校验码的值。
示例:代码690123456789X1校验码的计算见表B.1。

步 骤

举 例 说 明

1.自右向左顺序编号

位置序号

13

12

11

10

9

8

7

6

5

4

3

2

1

代码

6

9

0

1

2

3

4

5

6

7

8

9

X

2.从序号2开始求出偶数位上数字之和①

9+7+5+3+1+9=34 ①

3. ①*3=②

34×3=102  ②

4.从序号3开始求出奇数位上数字之和③

8+6+4+2+0+6=26 ③

5. ②+③=④

102+26=128 ④

6.用大于或等于结果④且为10最小整数倍的数减去④,其差即为所求校验码的值

130-128=2
校验码X1=2

 

 

 

 

 

 

校验码的计算方法

 

 

 

 

二、SQL实现:

 

 

Go

-- =============================================

-- Author:        <Maco Wang>

-- Create date: <2009-10-27 16:01>

-- Description:   <计算条形码的校验码>

-- =============================================

create function [dbo].[Get_CheckCode]

(

    @ActiveCode varchar(12)

)  

returns varchar(13)

as  

begin  

    declare @codelength int

    set @codelength= len(@ActiveCode)

    declare @curnum int;set @curnum=0

    declare @temp1 int;set @temp1=0

    declare @temp2 int;set @temp2=0

    declare @locatnum int;set @locatnum=0

    declare @code13 int

    declare @i int;set @i=0

    while(@i<@codelength)

    begin

       set @locatnum=@i+2;

       set @curnum=floor(substring(@ActiveCode,@codelength-@i,1))

       if(@locatnum%2=0)

           set @temp1=@temp1+@curnum

       else

           set @temp2=@temp2+@curnum

       set @i=@i+1

    end

    set @code13=10-(@temp1*3+@temp2)%10;

    if(@code13=10)

       set @code13=0

    return @ActiveCode+cast(@code13 as varchar(1));

end

 

--测试示例

select dbo.[Get_CheckCode](‘827123121212‘)

 

--运行结果

/*

8271231212124

*/

得到条形码的校验位函数