• BarCode128B字符转换函数(PB,SQL)


    PB

     1 //CODE128条码基础知识
     2 //CODE128有三个版本
     3 //CODE128A: 标准数字和字母, 控制符, 特殊字符
     4 //CODE128B: 标准数字和字母, 小写字母, 特殊字符
     5 //CODE128C: [00]-[99]的数字对集合, 共100个
     6 //本函数采用CODE128B版本
     7 //条码由开始位、数据位、校验位、停止位组成
     8 //计算过程:
     9 //1.取各字符ASC码乘以字符序号之和(以ASC=32为分界点,大于32减32,小于32加64)
    10 //2.计算校验码
    11 //3.组合条码:开始位+数据位+校验位+停止位
    12 int li_asc_total = 104
    13 int li_asc_tmp,i
    14 char lc_start=char(204)//采用CODE128B版本
    15 char lc_stop=char(206)
    16 int li_check_digit
    17 string ls_check_digit
    18 
    19 //1.取各字符ASC码乘以字符序号之和(以ASC=32为分界点,大于32减32,小于32加64)
    20 For i = 1 To len(as_sourcetext)
    21 li_asc_tmp = Asc(mid(as_sourcetext,i, 1))
    22 If li_asc_tmp >= 32 Then
    23 li_asc_total = li_asc_total + (li_asc_tmp - 32) * i
    24 Else
    25 li_asc_total = li_asc_total + (li_asc_tmp + 64) * i
    26 End If
    27 Next
    28 //2.计算校验码
    29 li_check_digit = mod(li_asc_total,103)
    30 If li_check_digit >= 95 Then//特殊字符
    31 li_check_digit = li_check_digit + 100
    32 Else
    33 li_check_digit = li_check_digit + 32
    34 end if
    35 ls_check_digit = char(li_check_digit)
    36 //3.组合条码:开始位+数据位+校验位+停止位
    37 Return lc_start + as_sourcetext + ls_check_digit + lc_stop

    SQL

     1 create FUNCTION [dbo].[UDF_GetStr2Code128](
     2  @Str NVARCHAR(200))--128B码:ChrW(204)
     3  RETURNS NVARCHAR(200) 
     4 AS
     5 BEGIN
     6  DECLARE @checkB INT 
     7  DECLARE @i INT ,@j INT
     8  DECLARE @str2 NVARCHAR(2)
     9  SET @i=1
    10  
    11  SET @checkB = 1  --开始位的码值为104 mod 103 =1
    12                   --
    13  WHILE @i <= LEN(@Str) 
    14  BEGIN
    15   SET @str2 = SUBSTRING(@Str,@i,1)
    16   SET @j = ASCII(SUBSTRING(@Str,@i,1))--ASCII(@str2) --不过滤无效字符,比如汉字
    17   IF @j<135 
    18   BEGIN
    19    SET @j=@j-32
    20   END
    21   ELSE IF @j >=135 
    22   BEGIN
    23    SET @j=@j-100
    24   END
    25   SET @checkB = @checkB +  @i * @j
    26   SET @i=@i+1
    27  END  
    28  
    29  
    30  SET @checkB = @checkB % 103   --计算校验位
    31  IF @checkB<95 AND @checkB>0 --有的资料直接求103的模,解说不充分,因为有的校验位超过127时,系统会"吃"掉它们(连带休止符).
    32  BEGIN
    33   SET @checkB = @checkB + 32
    34  END
    35  ELSE IF @checkB > 94  -- '字体设置时,字模被定义了2个值.观察字体文件时能发现.
    36  BEGIN
    37   SET @checkB = @checkB + 100
    38  END
    39  
    40      RETURN NCHAR(204) + @Str + CASE WHEN @checkB>0 THEN NCHAR(@checkB) ELSE NCHAR(32) END + NCHAR(206)
    41     
    42 END
  • 相关阅读:
    【ArcGIS 10.2新特性】ArcGIS 10.2将PostgreSQL原生数据发布为要素服务
    字节流,字符流 有什么区别
    java--模板方法模式
    hdu2829 四边形优化dp
    【ArcGIS 10.2新特性】ArcGIS 10.2 for Desktop 新特性(二)
    B/S架构 Web打印程序(Argox)
    poj 1611 The Suspects(并查集)
    microsoft visual studio遇到了问题,需要关闭
    [置顶] Windows显示驱动(WDDM)编程初步(2)
    Linux查看设置系统时区
  • 原文地址:https://www.cnblogs.com/Blackcow/p/3718138.html
Copyright © 2020-2023  润新知