Free BarCode128 SQL编码

CREATE   FUNCTION StringToBarcode
 (@Value Varchar(50)   )
RETURNS NVarchar(100)
AS
BEGIN
 Declare @charCount int
 Declare  @charPos int, @minCharPos int
 declare @currentChar int, @checksum int
   Declare @isTableB int,@isValid int
   Declare @returnValue NVarchar(100)
 
 set @isTableB=1
 set @isValid=1
 set @returnValue=''

 if Len(@Value)>0
 BEGIN
  set @charCount=1
  while @charCount<=Len(@Value)
  BEGIN
   SET @currentChar = ASCII(Substring(@value,@charCount, 1))
   IF NOT (@currentChar>=32 AND @currentChar<=126)
   BEGIN
    SET @isValid=0
    break
   END
   SET @charCount=@charCount+1
  END

  if @isValid=1
  BEGIN
   SET @charPos=1
   WHILE @charPos<=LEN(@value)
   BEGIN
    if @isTableB=1
    BEGIN
     --See if interesting to switch to table C
               --yes for 4 digits at start or end, else if 6 digits
     IF @charPos=1 or @charPos+3=Len(@Value)
      SET @minCharPos=4
     ELSE
      SET @minCharPos=6

     SET @minCharPos=dbo.IsNumber(@Value,@charPos, @minCharPos)
     if @minCharPos<0
     BEGIN
      --Choice table C
      IF @charPos=1
       --Starting with table C
       SET @returnValue=Nchar(205)
      ELSE
       --Switch to table C
                     SET @returnValue = @returnValue + Nchar(199)
      SET @isTableB=0
     END
     ELSE
     BEGIN
      if (@charPos = 1)                              
                  --Starting with table B
                   SET @returnValue = Nchar(204)
     END
    END

    ----------------------------
    if @isTableB=0
    BEGIN
     --// We are on table C, try to process 2 digits
     SET @minCharPos = 2
     SET @minCharPos=dbo.IsNumber(@Value,@charPos, @minCharPos)
     IF @minCharPos <0 -- OK for 2 digits, process it
     BEGIN
      SET @currentChar=(Substring(@Value,@charPos,2))
      if @currentChar<95
       SET @currentChar=@currentChar+32
      ELSE
       SET @currentChar=@currentChar+100

      SET @returnValue = @returnValue+NCHAR(@currentChar)
      SET @charPos=@charPos+2
     END
     ELSE
     BEGIN
      --// We haven't 2 digits, switch to table B
                  SET @returnValue = @returnValue + Nchar(200)
                  SET @isTableB = 1
     END
    END
           
    ----------------------------        
    IF @isTableB=1
    BEGIN     
     --Process 1 digit with table B
     SET @returnValue = @returnValue + Substring(@Value,@charPos, 1)
     set @charPos=@charPos+1
            END
   END
   
   --Calculation of the checksum
   declare @loop int
   set @loop=1
         set @checksum = 0
   
   While @loop<=Len(@returnValue)
         BEGIN
    set @currentChar = ASCII(Substring(@returnValue,@loop, 1))
    IF @currentChar<127
     SET @currentChar=@currentChar-32
    ELSE
     SET @currentChar=@currentChar-100
    IF @Loop=1
     set @checksum = @currentChar
    else
     set @checksum = (@checksum + (@loop-1) * @currentChar) % 103
    
    SET @loop=@loop+1
   END                 
                  
         --Calculation of the checksum ASCII code
         if  @checksum < 95
    set  @checksum =@checksum+ 32
   else
    set @checksum=@checksum + 100
         -- Add the checksum and the STOP
         set @returnValue = @returnValue +Nchar(@checksum)+Nchar(206)
  END
 END

 RETURN @returnValue
END

 

CREATE  FUNCTION IsNumber(
 @InputValue Varchar(50),
 @CharPos int,
 @MinCharPos int)
RETURNS int
AS
BEGIN
 Declare @ValLength int
 set @ValLength=Len(@InputValue)
 set @MinCharPos=@MinCharPos-1
   if (@CharPos + @MinCharPos <= @ValLength)
   BEGIN
  while (@MinCharPos >= 0)
  BEGIN
     if ASCII(Substring(@InputValue,@CharPos + @MinCharPos, 1)) < 48
       OR ASCII(Substring(@InputValue,@CharPos + @MinCharPos, 1)) > 57    
        break    
     set @MinCharPos=@MinCharPos-1
  END
 END
 return @MinCharPos
END

*********************************************************************************************** * 条形码制作简明指导 * * * * 2010年.杭州(FreeBarcode) * *********************************************************************************************** 1、首先,FreeBarcode 是一款完全免费的软件,任何人都可以自由使用它,但禁止任何人捆绑到商业软件或 共享软件中销售。自从这个软件发布之后,用户群迅速膨胀,这是好事,说明这款软件还比较实用,但也 因此产生另一个问题:有的用户对“完全免费”这四个字不甚理解。所以,咨询的、提要求的、请教的等 等络绎不绝。有工厂用户要输出流水条码的、有商家用户要输出条码商品标签的、有印刷行业的用户要输 出特别的格式,等等,各行各业,五花八门的拥上来咨询、请教、提要求。在此作者声明:本软件作者对 FreeBarcode 软件,不提供任何服务,请用户们不要再咨询、请教,更不要提要求。 2、FreeBarcode 2.1.0.409 版本支持35大类条码的制作,这在免费条码制作软件中是极其少见的。虽然这个 软件没有提供排版功能,但它却有一个输出到剪贴板的功能,您为什么不可以用Word、WPS、CorelDraw等 等软件排版呢?难道Word、WPS、CorelDraw这些软件的排版功能,还不够强大吗? 3、FreeBarcode 是完全基于矢量图形的,不存在光栅图形输出的误差。所以,它的制作精度,只和您的打印 机有关。但条形码的等级,还和打印介质有关系,并非仅由打印精度决定。一般而言,使用激光、喷墨打 印机,只能制作出C级、D级的条码,若要制作出A级、B级条码,就得使用热转印或热敏打印机打印。用户 可能会发现这样一个问题:超市里商品标签上的条码,看起来很粗糙,甚至带有锯齿,可是条码扫描枪很 好读出来,而你打印的很精密的条码,条码枪却读不出,这是为什么呢?这就是因为打印介质问题,因为 条码枪扫描时,需要条码反射光到条码扫描器,所以你的条码打印得很好,却不怎么反光的话,条码扫描 器就读不出了。当然,这也和条码打印到什么纸张上有关,因为条码标签纸一般都是反光性很好的,若打 印在普通纸张上,性能就要差一些。当然,还和条码扫描枪的灵敏度有关,灵敏度高的条码枪,条码微弱 的反光即可,灵敏度差的条码枪,需要较强的反光,才能识别出来。现在,也有不依赖条码反射光的扫描 器,不过这类扫描器价格相对高些。有的用户用劣质硒鼓、墨水,打印到劣质的纸张上,扫描枪又是最低 档次的…… 4、制作条形码先得了解相关条码的一些常识。比方有的用户,连某种条码的尺寸规范还没弄清楚,就开始制 作条码,这样胡乱做出的条码,连外形尺寸都不达标,当然没什么用,因为条码并不是你想做多大就做多 大的,因为它要适配条码扫描器,否则条码扫描器不能认识。所以,制作条码之前最好先了解下相应的条 码。现在网络这么发达,网上到处可找到条码相关的信息。 5、对于1D条形码来说,比较常用又比较复杂的是Code 128A\B\C条码和GS1/EAN/UCC 128A\B\C 条码。可以这 么说,目前绝大部分专业或免费的条形码制作软件,对Code 128条码和GS1/EAN/UCC 128 条码的支持,都 是不怎么完善的,仅仅支持明码 128条码。所谓明码就是abcd...1234...#$<|=...这些可在键盘上打出的 字符。但 128码还支持编码那些无法在键盘上打出的控制符号,比如:回车、ESC、Tab等等你可以在键盘 上看见,但无法在键盘上打出。FreeBarcode 是完整支持128条码的,如何在FreeBarcode中输入这些在键 盘上无法打出的32个控制符号呢?象下面一样输入即可(一个反斜杠\加上字符名): \NUL、\S
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值