博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BarCode128B字符转换函数(PB,SQL)
阅读量:4511 次
发布时间:2019-06-08

本文共 2110 字,大约阅读时间需要 7 分钟。

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 = 10413 int li_asc_tmp,i14 char lc_start=char(204)//采用CODE128B版本15 char lc_stop=char(206)16 int li_check_digit17 string ls_check_digit18 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 Then23 li_asc_total = li_asc_total + (li_asc_tmp - 32) * i24 Else25 li_asc_total = li_asc_total + (li_asc_tmp + 64) * i26 End If27 Next28 //2.计算校验码29 li_check_digit = mod(li_asc_total,103)30 If li_check_digit >= 95 Then//特殊字符31 li_check_digit = li_check_digit + 10032 Else33 li_check_digit = li_check_digit + 3234 end if35 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=110  11  SET @checkB = 1  --开始位的码值为104 mod 103 =112                   --13  WHILE @i <= LEN(@Str) 14  BEGIN15   SET @str2 = SUBSTRING(@Str,@i,1)16   SET @j = ASCII(SUBSTRING(@Str,@i,1))--ASCII(@str2) --不过滤无效字符,比如汉字17   IF @j<135 18   BEGIN19    SET @j=@j-3220   END21   ELSE IF @j >=135 22   BEGIN23    SET @j=@j-10024   END25   SET @checkB = @checkB +  @i * @j26   SET @i=@i+127  END  28  29  30  SET @checkB = @checkB % 103   --计算校验位31  IF @checkB<95 AND @checkB>0 --有的资料直接求103的模,解说不充分,因为有的校验位超过127时,系统会"吃"掉它们(连带休止符).32  BEGIN33   SET @checkB = @checkB + 3234  END35  ELSE IF @checkB > 94  -- '字体设置时,字模被定义了2个值.观察字体文件时能发现.36  BEGIN37   SET @checkB = @checkB + 10038  END39  40      RETURN NCHAR(204) + @Str + CASE WHEN @checkB>0 THEN NCHAR(@checkB) ELSE NCHAR(32) END + NCHAR(206)41     42 END

 

转载于:https://www.cnblogs.com/Blackcow/p/3718138.html

你可能感兴趣的文章
【Flex】读取本地XML,然后XML数据转成JSON数据
查看>>
RecyclerView使用StaggeredGridLayoutManager布局的粘性头部实现
查看>>
Android 优雅的让Fragment监听返回键
查看>>
Android 数据库框架总结,总有一个适合你!
查看>>
Android 设置 横屏 竖屏
查看>>
Spring MVC兑现QQ第三方登录
查看>>
R类型5 R语言 数据帧
查看>>
百度云推送教程
查看>>
简单几步轻松实现在微信中直接下载APK
查看>>
python基础(六)
查看>>
接口的定义与使用
查看>>
Censtos Hadoop安装
查看>>
【模板】线段树 1(洛谷_3372)
查看>>
后台调用前台js
查看>>
解析ArrayList与LinkedList的遍历方法
查看>>
HTML/CSS权值继承
查看>>
数据基础
查看>>
Js函数
查看>>
C++多重继承问题
查看>>
SMINT:单页网站的免費jQuery插件
查看>>