利用Sql为Code128码添加起始符和休止符
来源:互联网 发布:广电网络是什么单位 编辑:程序博客网 时间:2024/05/18 01:06
在利用code128码字体打印条码是,打印出来的条形码,扫描枪会出现认不出的情况,这种情况是由于直接将文本设置为code128字体而没有给他们指定起始符和休止符引起的。
经过查资料获发现好多人遇到这样的问题,特别是利用word,excel直接设置code128字体打印时,一般都会曲线这种问题。
发现网上有个牛人在excel下用VBA写了一个为文本添加起始符和休止符的函数。确实好用
代码如下:
Function code128b(Tar As Range) '128B码:ChrW(204).Dim s$, i%, ss$, j%, curR%, checkB%curR = Tar.Rows = Tar.ValuecheckB = 1 '开始位的码值为104 mod 103 =1For i = 1 To Len(s) ss = Mid(s, i, 1) j = Asc(ss) '不过滤无效字符,比如汉字. If j < 135 Then j = j - 32 ElseIf j > 134 Then j = j - 100 End If checkB = (checkB + i * j) Mod 103 '计算校验位NextIf checkB < 95 And checkB > 0 Then '有的资料直接求103的模,解说不充分,因为有的校验位超过127时,系统会"吃"掉它们(连带休止符). checkB = checkB + 32ElseIf checkB > 94 Then '字体设置时,字模被定义了2个值.观察字体文件时能发现. checkB = checkB + 100End Ifcode128b = ChrW(204) & s & IIf(checkB, ChrW(checkB), Chr(32)) & ChrW(206)End FUNCTION
本人根据这段代码,突然想到是不是可以直接移植到Sql Server能,经过打印,扫描试验确实可以,代码如下:
create FUNCTION StrToCode128B( @Str NVARCHAR(200))--128B码:ChrW(204) RETURNS NVARCHAR(200) ASBEGIN DECLARE @checkB INT DECLARE @i INT ,@j INT DECLARE @str2 NVARCHAR(2) SET @i=1 SET @checkB = 1 --开始位的码值为104 mod 103 =1 -- WHILE @i <= LEN(@Str) BEGIN SET @str2 = SUBSTRING(@Str,@i,1) SET @j = ASCII(@str2) --不过滤无效字符,比如汉字 IF @j<135 BEGIN SET @j=@j-32 END ELSE IF @j>134 BEGIN SET @j=@j-100 END SET @checkB = (@checkB + @i * @j) % 103 --计算校验位 SET @i=@i+1 END IF @checkB<95 AND @checkB>0 --有的资料直接求103的模,解说不充分,因为有的校验位超过127时,系统会"吃"掉它们(连带休止符). BEGIN SET @checkB = @checkB + 32 END ELSE IF @checkB > 94 -- '字体设置时,字模被定义了2个值.观察字体文件时能发现. BEGIN SET @checkB = @checkB + 100 END RETURN NCHAR(204) + @Str + CASE WHEN @checkB>0 THEN NCHAR(@checkB) ELSE NCHAR(32) END + NCHAR(206) END
以上在转化的过程中主要遇到如下问题:
1.VBA中的ASC()函数对应SQL的函数是ASCII()
2.VBA中的ChrW()函数对应的SQL函数是 NCHAR()。这点需要特别注意,因为ChrW和HCHAR都是unicode字符。而如果用CHAR的话就是不行,刚开始没注意,用CHAR函数,拼接后,返回的字符串始终为空(或不可见字符), 结果调试好久都不知道问题出在哪里。后来经过老李的指点终于解决了问题。在此特别感谢老李同志 ^_^ 。
通过这个过程感觉到所有的程序都是想通的,只要发挥想象,问题总可以解决的。
引用地址:http://yanghao831207.blog.163.com/blog/static/30219862011367106778/
字体下载地址:http://d.download.csdn.net/down/3535154/thecityofsky
- 利用Sql为Code128码添加起始符和休止符
- EAN128/CODE128码生成
- C# 生成Code128码
- C#生成Code128码
- Code128
- SQL SERVER清空表数据,自增长起始设为0
- 3字节起始码和4字节起始码
- 阿里巴巴搜索添加起始和结束页功能查看图片
- 为SQL Server 2000数据库添加用户名和密码
- 向数据库添加数据有三种方法利用 SQL语句添加、通过SqlParameter参数添加和通过存储过程添加。(一)
- 向数据库添加数据有三种方法利用 SQL语句添加、通过SqlParameter参数添加和通过存储过程添加。(二)
- 向数据库添加数据有三种方法利用 SQL语句添加、通过SqlParameter参数添加和通过存储过程添加。(三)
- CODE128 码与CODE39码的区别
- 产生一串字符的Code128码
- CODE128码在PB中的实现
- CODE128码在PB中的实现
- A_Prn_Barcode 应用code128码的 注意事项
- H.264和MPEG4起始码(startcode)
- 像素关系
- 极限测试之Matlab与Forcal有无JIT加速器的比较
- VI常用命令
- 螺线管:交流VS直流
- memcached全面剖析–5. memcached的应用和兼容程序
- 利用Sql为Code128码添加起始符和休止符
- C# aspx 数据绑定 Bind、Eval 、DataBinder.eval、Container.DataItem
- 如何配置gentoo的源
- 如何自动生成Makefile
- Parcelable - How to do that in Android
- 启示录:什么是互联网产品?
- rtsp移动流媒体服务器Darwin Streaming Server安装和配置
- 极限测试之Matlab与Forcal真实演练
- Unicode详解