zoukankan      html  css  js  c++  java
  • 得到条形码的校验位函数

    一、校验码说明:

    校验码的计算方法

    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

    */

  • 相关阅读:
    hdu2860 并查集模拟
    hdu 3938 Portal离线并查集
    hdu 2489 Minimal Ratio Tree (DFS枚举+MST)
    hdu 3172 并查集+map
    hdu 1829 A Bug's Life 并查集系列
    hdu 1598 find the most comfortable road
    HDU1198
    【Oracle】【17】表创建后,对表进行操作(添加字段,删除主键约束等)
    【JS】【19】使用Jquery判断是电脑或手机或微信浏览器访问
    【JS】【18】当前时间加减一天和格式化时间格式
  • 原文地址:https://www.cnblogs.com/accumulater/p/6244675.html
Copyright © 2011-2022 走看看