在利用code128码字体打印条码是,打印出来的条形码,扫描枪会出现认不出的情况,这种情况是由于直接将文本设置为code128字体而没有给他们指定起始符和休止符引起的。

经过查资料获发现好多人遇到这样的问题,特别是利用word,excel直接设置code128字体打印时,一般都会曲线这种问题。

发现网上有个牛人在excel下用VBA写了一个为文本添加起始符和休止符的函数。确实好用

代码如下:

Function code128b(Tar As Range)   '128B码:ChrW(204).
Dim s$, i%, ss$, j%, curR%, checkB%
curR = Tar.Row
s = Tar.Value
checkB = '开始位的码值为104 mod 103 =1
For i = To Len(s)
ss = Mid(s, i, )
j = Asc(ss) '不过滤无效字符,比如汉字.
If j < Then
j = j -
ElseIf j > Then
j = j -
End If
checkB = (checkB + i * j) Mod '计算校验位
Next
If checkB < And checkB > Then '有的资料直接求103的模,解说不充分,因为有的校验位超过127时,系统会"吃"掉它们(连带休止符).
checkB = checkB +
ElseIf checkB > Then '字体设置时,字模被定义了2个值.观察字体文件时能发现.
checkB = checkB +
End If
code128b = ChrW() & s & IIf(checkB, ChrW(checkB), Chr()) & ChrW()
End FUNCTION

根据这段代码,突然想到是不是可以直接移植到Sql Server能,经过打印,扫描试验确实可以,代码如下:

create FUNCTION StrToCode128B(
@Str NVARCHAR(200))--128B码:ChrW(204)
RETURNS NVARCHAR(200)
AS
BEGIN
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函数,拼接后,返回的字符串始终为空(或不可见字符), 结果调试好久都不知道问题出在哪里。

利用SQL为Code128码添加起始符和休止符的更多相关文章

  1. 利用SQL注入漏洞登录后台的实现方法

    利用SQL注入漏洞登录后台的实现方法 作者: 字体:[增加 减小] 类型:转载 时间:2012-01-12我要评论 工作需要,得好好补习下关于WEB安全方面的相关知识,故撰此文,权当总结,别无它意.读 ...

  2. 利用SQL注入漏洞登录后台

    所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询 ...

  3. 利用SQl对数据库实行数据拆分与组合

    利用SQl对数据库实行数据拆分与组合实现提供以下几种方案: 方法一: WITH CTE AS (SELECT A.Id,A.[Uid],UserName FROM (SELECT A.[id], RE ...

  4. android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

    写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载   zbarLib编译project  project下载0积分 bug 在2.3的系统中Hol ...

  5. ASP.net(C#)利用SQL Server实现注册和登陆功能

    说说我现在吧,楼主现在从事的事IT行业,主攻DotNet技术:当然这次上博客园我也是有备而来,所有再次奉献鄙人拙作,以飨诸位,望诸位不吝赐教. 世界上大多数的工作都是熟练性的工种,编程也不例外,做久了 ...

  6. .NET 利用反射将对象数据添加到数据库

    .NET 利用反射将对象数据添加到数据库   一些小型的项目,在不使用其他的框架(LINQ,NHibernate,EF等等框架)的前提下,这时候一些反复的增删改查就会让我们感到极其的繁琐,厌烦,为了避 ...

  7. KPPW2.5 漏洞利用--SQL注入

    KPPW2.5 漏洞利用--SQL注入 SQL注入--布尔型盲注 环境搭建 1,集成环境简单方便,如wamp,phpstudy.... 2,KPPW v2.2源码一份(文末有分享)放到WWW目录下面 ...

  8. SQLmap是一款用来检测与利用SQL漏洞的注入神器。

    sqlmap 重要参考 http://www.kali.org.cn/forum-75-1.html SQLmap是一款用来检测与利用SQL漏洞的注入神器.开源的自动化SQL注入工具,由Python写 ...

  9. PHP二维码添加logo的方法

    PHP二维码添加logo的方法<pre> public function createqcode($text,$id){ include '/phpqrcode/phpqrcode.php ...

随机推荐

  1. JavaScript客户端签名直传OSS

    参考链接: https://help.aliyun.com/document_detail/31925.html?spm=5176.11065259.1996646101.searchclickres ...

  2. sklearn中的回归器性能评估方法(转)

    explained_variance_score() mean_absolute_error() mean_squared_error() r2_score() 以上四个函数的相同点: 这些函数都有一 ...

  3. Generative Adversarial Nets(原生GAN学习)

    学习总结于国立台湾大学 :李宏毅老师 Author: Ian Goodfellow • Paper: https://arxiv.org/abs/1701.00160 • Video: https:/ ...

  4. MR运动静止用户区分

    1.客户端打开菜单[MR]-[MR室内室外判定设置] 设置主小区是室外站且主小区信号比较强时RSRP门限 2.设置"上报数据用户临小区切换次数门限设置"值为15 mysql中t_m ...

  5. 如何交叉编译 linux kernel 内核

    Compilation We first need to move the config file by running cp arch/arm/configs/bcmrpi_cutdown_defc ...

  6. Linux清除文件内容的几种方法

    # 清空或删除大文件内容的五种方法: # 法一:通过重定向到 Null 来清空文件内容 $ >test.sh # 法二:使用 ‘true' 命令重定向来清空文件 $ true > test ...

  7. centos环境自动化批量安装jdk软件脚本

    自动化安装jdk软件部署脚本 准备工作: 1.在执行脚本的服务器上生成免密码公钥: 安装expect命令 yum install -y expect ssh-keygen 三次回车 2.将jdk-7u ...

  8. java工程添加类库

    在属性中添加自定义类库 在工程中引入自定义类库

  9. 内存分配方式,堆区,栈区,new/delete/malloc/free

    1.内存分配方式 内存分配方式有三种: [1]从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. [2]在栈上创建.在执行函数时 ...

  10. position:absolute在IE8浏览器下无法显示正确位置

      在网页head下添加 <meta http-equiv="x-ua-compatible" content="ie=8" />