在利用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. java 多线程和并行程序设计

    多线程使得程序中的多个任务可以同时执行 在一个程序中允许同时运行多个任务.在许多程序设计语言中,多线程都是通过调用依赖系统的过程或函数来实现的 为什么需要多线程?多个线程如何在单处理器系统中同时运行? ...

  2. IDEA常用快捷键和常用插件集成,持续更新......

    用习惯了eclipse,不容易转过来,记一下! 快捷键 psvm: main 方法快捷键 sout :syso快捷键 CTRL+O: 重写父类方法 Ctrl+Alt+V :自动补全返回值 Ctrl+S ...

  3. 【转】mysql8.0 在window环境下的部署与配置

    [转]mysql8.0 在window环境下的部署与配置 今天在阿里云window服务器上配置mysql环境,踩了一些坑,分享出来.需要的朋友可以看看.额,或许有人要吐槽我为什么不在linux上去配置 ...

  4. SciPy模块应用

    1.图像模糊  图像的高斯模糊是非常经典的图像卷积例子.本质上,图像模糊就是将(灰度)图像I 和一个高斯核进行卷积操作:,其中是标准差为σ的二维高斯核.高斯模糊通常是其他图像处理操作的一部分,比如图像 ...

  5. MCS-51单片机存储地址空间划分

    1.前言 MCS-51的存储器有片内RAM.片外RAM 和 ROM 三个空间. MCS-51单片机在物理结构上有四个存储空间 1.片内程序存储器(片内ROM)2.片外程序存储器(片外ROM)3.片内数 ...

  6. centos6.8系统安装 Hadoop 2.7.3伪分布式集群

    安装 Hadoop 2.7.3 配置ssh免密码登陆 cd ~/.ssh                       # 若没有该目录,请先执行一次ssh localhost ssh-keygen - ...

  7. Window下通过charles代理抓取iphone/android手机Https请求乱码问题处理

    Window下通过charles代理抓取iphone手机Https请求乱码问题 如果保持默认设置,https的reqeust和response都是乱码,设置完之后https就可以抓包了 手机端操作: ...

  8. vue系列之过渡效果

    参考地址:http://cn.vuejs.org/v2/guide/transitions.html vue2.0,要想实现过渡效果,要用transition组件 代码: <div id=&qu ...

  9. h5新API之WebStorage解决页面数据通信问题

    localStorage相信大家都不陌生,今天我们要讨论的不是怎么存储数据,获取数据.而是看看WebStorage的一些妙用,相信大家在开发中遇到过这样一个场景,一个页面中嵌套一个iframe,ifr ...

  10. Socket 实现聊天功能

    注:本文来自:简书:jianshu 作者:jijs链接:http://www.jianshu.com/p/7c0722a8b66f來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...